【问题标题】:How to configure database configuration connection pooling with custom prefix in Spring Boot?如何在 Spring Boot 中使用自定义前缀配置数据库配置连接池?
【发布时间】:2017-11-22 06:32:56
【问题描述】:

考虑使用 spring-boot-starter-jdbc 的 Spring Boot,并且您希望拥有一个或多个数据源,它们的属性名称中确实有一个自定义前缀。根据我在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;
    }
}

【问题讨论】:

    标签: java jdbc spring-boot connection-pooling spring-jdbc


    【解决方案1】:

    实际上,由于 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2019-08-25
      • 2019-02-07
      • 2018-09-21
      • 2021-10-03
      • 1970-01-01
      • 2015-06-08
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多