in wrapper/src/main/java/software/amazon/jdbc/Driver.java [143:235]
public Connection connect(final String url, final Properties info) throws SQLException {
if (!acceptsURL(url)) {
return null;
}
LOGGER.finest("Opening connection to " + url);
ConnectionUrlParser.parsePropertiesFromUrl(url, info);
final Properties props = PropertyUtils.copyProperties(info);
final String databaseName = ConnectionUrlParser.parseDatabaseFromUrl(url);
if (!StringUtils.isNullOrEmpty(databaseName)) {
PropertyDefinition.DATABASE.set(props, databaseName);
}
LOGGER.finest(() -> PropertyUtils.logProperties(
PropertyUtils.maskProperties(props), "Connecting with properties: \n"));
final String profileName = PropertyDefinition.PROFILE_NAME.getString(props);
ConfigurationProfile configurationProfile = null;
if (!StringUtils.isNullOrEmpty(profileName)) {
configurationProfile = DriverConfigurationProfiles.getProfileConfiguration(profileName);
if (configurationProfile != null) {
PropertyUtils.addProperties(props, configurationProfile.getProperties());
if (configurationProfile.getAwsCredentialsProviderHandler() != null) {
AwsCredentialsManager.setCustomHandler(configurationProfile.getAwsCredentialsProviderHandler());
}
} else {
throw new SQLException(
Messages.get(
"Driver.configurationProfileNotFound",
new Object[] {profileName}));
}
}
TelemetryFactory telemetryFactory = new DefaultTelemetryFactory(props);
TelemetryContext context = telemetryFactory.openTelemetryContext(
"software.amazon.jdbc.Driver.connect", TelemetryTraceLevel.TOP_LEVEL);
try {
final String driverUrl = url.replaceFirst(PROTOCOL_PREFIX, "jdbc:");
TargetDriverHelper helper = new TargetDriverHelper();
java.sql.Driver driver = helper.getTargetDriver(driverUrl, props);
final String logLevelStr = PropertyDefinition.LOGGER_LEVEL.getString(props);
if (!StringUtils.isNullOrEmpty(logLevelStr)) {
final Level logLevel = Level.parse(logLevelStr.toUpperCase());
final Logger rootLogger = Logger.getLogger("");
for (final Handler handler : rootLogger.getHandlers()) {
if (handler instanceof ConsoleHandler) {
if (handler.getLevel().intValue() > logLevel.intValue()) {
// Set higher (more detailed) level as requested
handler.setLevel(logLevel);
}
}
}
PARENT_LOGGER.setLevel(logLevel);
}
TargetDriverDialect targetDriverDialect = configurationProfile == null
? null
: configurationProfile.getTargetDriverDialect();
if (targetDriverDialect == null) {
final TargetDriverDialectManager targetDriverDialectManager = new TargetDriverDialectManager();
targetDriverDialect = targetDriverDialectManager.getDialect(driver, props);
}
final ConnectionProvider defaultConnectionProvider = new DriverConnectionProvider(driver);
ConnectionProvider effectiveConnectionProvider = null;
if (configurationProfile != null) {
effectiveConnectionProvider = configurationProfile.getConnectionProvider();
}
return new ConnectionWrapper(
props,
driverUrl,
defaultConnectionProvider,
effectiveConnectionProvider,
targetDriverDialect,
configurationProfile,
telemetryFactory);
} catch (Exception ex) {
context.setException(ex);
context.setSuccess(false);
throw ex;
} finally {
context.closeContext();
}
}