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

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

考虑使用 Spring Boot 和 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 注解的绑定(bind)功能,结果非常简单,您可以按照以下方式直接填充 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;
}

关于java - 如何在 Spring Boot 中使用自定义前缀配置数据库配置连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640778/

相关文章:

java - 在 Java 中验证字符串

java - 无法解析 jakarta.persistence.EntityManagerFactory 类型。它是从所需的 .class 文件间接引用的

spring-boot - 具有 Spring-Boot 和发布管理的微服务

java - 如何在运行时为当前测试ApplicationContext注册Spring Context事件

java - 在 z/OS OMVS 中安装 JAVA 7.1 版本后,出现以下错误

java - Hibernate 复杂的唯一约束

通过 JDBC 连接到数据库时出现 java SQLException

java - 使用 JDBC 创建数据库模式的模式

java - jackson 默认错误地忽略了未知字段

Java - 文件保存不起作用