Reputation: 12447
SB 3.4.2, Java 21
We can't use the autowired datasource as we are getting database credentials etc. from AWS Secrets manager.
In our application.properties, these are being ignored:
spring.datasource.hikari.connectionTimeout=60000
spring.datasource.hikari.maximumPoolSize=50
spring.datasource.hikari.idleTimeout=1200000
spring.datasource.hikari.maxLifetime=3000000
spring.datasource.hikari.poolName=my-pool
The config bean looks like this:
@Configuration
public class DataSourceConfig extends HikariConfig {
@Bean
public DataSource getDataSource() {
DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName(driverClassName);
awsSecretsManagerUtility().setSecretName(dbSecretName);
AWSSecretsManagerUtility.RDSSecret rdsSecret = awsSecretsManagerUtility().getSecretData(AWSSecretsManagerUtility.RDSSecret.class);
url = String.format("jdbc:postgresql://%s:%s/%s", rdsSecret.getHost(), rdsSecret.getPort(), rdsSecret.getDbname());
username = rdsSecret.getUsername();
password = rdsSecret.getPassword();
dataSourceBuilder.url(url);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
@Bean
public AWSSecretsManagerUtility awsSecretsManagerUtility() {
return new AWSSecretsManagerUtility();
}
The output we get when the app starts is
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']
Database driver: undefined/unknown
Database version: 16.2
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
How can we configure connection properties?
I tried adding this to the DataSourceConfig but it didn't help:
@Bean
@ConfigurationProperties("spring.datasource")
public DataSourceProperties regularDataSourceProperties() {
return new DataSourceProperties();
}
We also tried these alternative names:
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.pool-name=my-pool
Upvotes: -1
Views: 20
Reputation: 125202
Ignore the output from HIbernate, it doesn't tell you anything. See Problems with Hibernate startup logging after adding JPA with database in SpringBoot version 3.4.0
Use the DataSourceProperties
to get the builder, don't extend HikariConfig
in your @Configuration
class.
NOTE: I Assume that awsSecretsManagerUtility
actually is an @Bean
method and creates a bean. So why not simply inject it.
@Configuration
public class DataSourceConfig {
@Bean
@Primary
public DataSource dataSource(
AWSSecretsManagerUtility awsSecretsManagerUtility,
DataSourceProperties props) {
awsSecretsManagerUtility().setSecretName(dbSecretName);
var rdsSecret = awsSecretsManagerUtility().getSecretData(AWSSecretsManagerUtility.RDSSecret.class);
var url = String.format("jdbc:postgresql://%s:%s/%s", rdsSecret.getHost(), rdsSecret.getPort(), rdsSecret.getDbname());
props.setUrl(url);
props.setUsername(rdsSecret.getUsername());
props.setPassword(rdsSecret.getPassword());
return props.initializeDataSourceBuilder().build();
}
No the spring.datasource
properties will still be applied.
Upvotes: 1