如何在 Spring Boot 中使用自定义前缀配置数据库配置连接池?
How to configure database configuration connection pooling with custom prefix in Spring Boot?
考虑 Spring 使用 spring-boot-starter-jdbc
启动,并且您希望拥有一个或多个数据源,它们的 属性 名称中确实有一个自定义前缀。从我在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
中看到的情况来看,自动配置只能与默认前缀 spring.datasource
一起使用,但是一旦您修改它,您将自行设置关于池的属性。
有人可以阐明如何配置 Tomcat JDBC 池数据源更优雅(阅读 Spring 惯用语)吗?
当前解决方法:
@Configuration
public class DatabaseConfiguration {
@Value("${datasource.api.tomcat.maxWait:5000}")
private int maxWaitMillis;
@Value("${datasource.api.tomcat.test-on-borrow:true}")
private boolean testOnBorrow;
@Value("${datasource.api.tomcat.validation-query:SELECT 1}")
private String validationQuery;
@Bean(name = "apiDataSource")
@ConfigurationProperties(prefix = "datasource.api")
public DataSource apiDataSource() {
DataSource ds = DataSourceBuilder.create().build();
// Assume we make use of Apache Tomcat connection pooling (default in Spring Boot)
org.apache.tomcat.jdbc.pool.DataSource tds = (org.apache.tomcat.jdbc.pool.DataSource) ds;
tds.setTestOnBorrow(testOnBorrow);
tds.setValidationQuery(validationQuery);
tds.setMaxWait(maxWaitMillis);
return ds;
}
}
实际上,由于 Spring Boot 的 ConfigurationProperties
注释的绑定功能,它变得非常简单,您可以直接在下面填充 JDBC 连接池属性时尚,因此避免每个 属性 单独进行繁琐的初始化:
@Bean
@ConfigurationProperties(prefix = "datasource.api")
public PoolProperties apiPoolProperties() {
return new org.apache.tomcat.jdbc.pool.PoolProperties();
}
@Bean(name = "apiDataSource")
public DataSource apiDataSource(@Qualifier("apiPoolProperties") PoolProperties poolProperties) {
DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
logger.info("Initialized API Datasource: {}", ds);
return ds;
}
考虑 Spring 使用 spring-boot-starter-jdbc
启动,并且您希望拥有一个或多个数据源,它们的 属性 名称中确实有一个自定义前缀。从我在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
中看到的情况来看,自动配置只能与默认前缀 spring.datasource
一起使用,但是一旦您修改它,您将自行设置关于池的属性。
有人可以阐明如何配置 Tomcat JDBC 池数据源更优雅(阅读 Spring 惯用语)吗?
当前解决方法:
@Configuration
public class DatabaseConfiguration {
@Value("${datasource.api.tomcat.maxWait:5000}")
private int maxWaitMillis;
@Value("${datasource.api.tomcat.test-on-borrow:true}")
private boolean testOnBorrow;
@Value("${datasource.api.tomcat.validation-query:SELECT 1}")
private String validationQuery;
@Bean(name = "apiDataSource")
@ConfigurationProperties(prefix = "datasource.api")
public DataSource apiDataSource() {
DataSource ds = DataSourceBuilder.create().build();
// Assume we make use of Apache Tomcat connection pooling (default in Spring Boot)
org.apache.tomcat.jdbc.pool.DataSource tds = (org.apache.tomcat.jdbc.pool.DataSource) ds;
tds.setTestOnBorrow(testOnBorrow);
tds.setValidationQuery(validationQuery);
tds.setMaxWait(maxWaitMillis);
return ds;
}
}
实际上,由于 Spring Boot 的 ConfigurationProperties
注释的绑定功能,它变得非常简单,您可以直接在下面填充 JDBC 连接池属性时尚,因此避免每个 属性 单独进行繁琐的初始化:
@Bean
@ConfigurationProperties(prefix = "datasource.api")
public PoolProperties apiPoolProperties() {
return new org.apache.tomcat.jdbc.pool.PoolProperties();
}
@Bean(name = "apiDataSource")
public DataSource apiDataSource(@Qualifier("apiPoolProperties") PoolProperties poolProperties) {
DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
logger.info("Initialized API Datasource: {}", ds);
return ds;
}