如果我们以编程方式配置数据源,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();
}
为了让它以编程方式工作,我使用了以下代码片段。但我并不相信。我觉得这不是一个更清洁的解决方案。我必须从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
答案 0 :(得分:0)
请记住在这样的属性文件中从db的属性中提供tomcat。
# Oracle DB - "foo"
spring.datasource.tomcat.url=jdbc:oracle:thin:@//db-server-foo:1521/FOO
spring.datasource.tomcat.username=fooadmin
spring.datasource.tomcat.password=foo123
spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5
然后像这样配置数据源。
/**
* Auto-configured DataSource
*/
@ConfigurationProperties(prefix = "spring.datasource.tomcat")
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}