繁体   English   中英

如何在Spring Boot中使用自定义前缀配置数据库配置连接池?

[英]How to configure database configuration connection pooling with custom prefix in Spring Boot?

考虑使用带有spring-boot-starter-jdbc Spring Boot,并且您想要一个或多个数据源,这些数据源的属性名称中确实有一个自定义前缀。 根据我在org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration看到的信息,该自动配置只能与默认前缀spring.datasource ,但一旦对其进行修改,便会打开您自己设置有关池的属性。

有人可以说明如何更优雅地配置Tomcat JDBC Pool数据源(阅读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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM