【发布时间】:2018-11-25 11:08:15
【问题描述】:
如果我们以编程方式配置数据源,Spring Boot 数据源属性会起作用吗?
仅当我从 application.properties 获取数据库配置时,以下属性才有效。如果我以编程方式配置数据源,则以下属性不起作用。
spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5
我使用以下代码以编程方式配置数据源
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder.create().username(userName).password(password).url(url).driverClassName(driverName)
.build();
}
为了使它以编程方式工作,我使用了以下代码 sn-p。但我不相信。我觉得这不是一个更清洁的解决方案。我必须从 application.properties 中读取至少 20 个属性并将其添加到 PoolProperties。
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
@Primary
public DataSource dataSource() {
PoolProperties poolProperties = new PoolProperties();
poolProperties.setUrl(url);
poolProperties.setDriverClassName(driverName);
poolProperties.setUsername(userName);
poolProperties.setPassword(password);
poolProperties.setTestWhileIdle(false);
poolProperties.setTestOnBorrow(true);
poolProperties.setValidationQuery("SELECT 1 FROM DUAL");
poolProperties.setTestOnReturn(false);
poolProperties.setValidationInterval(30000);
poolProperties.setTimeBetweenEvictionRunsMillis(30000);
poolProperties.setInitialSize(10);
poolProperties.setMaxActive(10);
poolProperties.setMaxIdle(5);
poolProperties.setMinIdle(5);
poolProperties.setMaxWait(10000);
poolProperties.setRemoveAbandonedTimeout(60);
poolProperties.setMinEvictableIdleTimeMillis(30000);
poolProperties.setLogAbandoned(true);
poolProperties.setRemoveAbandoned(true);
DataSource datasource = new DataSource(); // import org.apache.tomcat.jdbc.pool.DataSource;
datasource.setPoolProperties(poolProperties);
return datasource;
}
我们可以让以下默认的 Spring Boot 属性工作吗?
spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5
【问题讨论】:
-
您已经在使用受支持的数据源,为什么还要手动配置它?您设置的所有属性都是可配置的,通过添加编程配置可以获得什么?如果你真的想要,你需要在你的情况下指定正确的前缀
spring.datasource.tomcat。但正如您在此处发布的内容所述,以编程方式添加它一无所获。 -
实际上我是从 Hashicorp Vault 获取数据库密码,这就是我手动配置它的原因。当我以编程方式执行初始大小时,最大活动,最大空闲,最小空闲...... application.properties 上的设置不起作用。如何让它发挥作用?
-
使保管库属性成为常规过程的一部分,而不是进行手动配置。编写一个
ApplicationContextInitializer注册一个基于 Vault 的PropertySource并将其添加到PropertySources 的列表中。这样你就可以使用 Spring Boot 提供的所有功能。 -
我会尝试 ApplicationContextInitializer 并更新您。感谢您的评论。
-
这对我来说也很痛苦
标签: spring spring-boot tomcat connection datasource