java - 如何扩展Spring Boot的DataSourceAutoConfiguration

原文 标签 java spring spring-boot

我希望能够利用Spring Boot数据源的自动配置。但是,它不支持我正在使用的所有功能,尤其是logValidationErrors

spring:
  datasource:
    driverClassName: oracle.jdbc.OracleDriver
    url: jdbc:jtds:sqlserver://111.11.11.11/DataBaseName
    username: someuser
    password: somepass
    testOnBorrow: true
    testWhileIdle: true
    validationQuery: select /* validationQuery */ 1 from dual
    minEvictableIdleTimeMillis: 1000    
    validationInterval: 30000


这些当前未使用:

    logValidationErrors: true
    maxAge: 1800000 # //30 Minute idle age
    removeAbondoned: true


我可以仅获取创建的DataSource bean并手动设置这些值吗?还是有更好的方法来扩展或包装自动配置?

有关logValidationErrors等的更多信息,请参见此处:https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html

最佳答案

我用BeanPostProcessor解决了这个问题,类似于Dave Syer的建议:

@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    if (bean instanceof DataSource) {
        DataSource ds = (DataSource) bean;
        ds.setLogValidationErrors(true);
        ds.setRemoveAbandoned(true);
        ds.setMaxAge(1800000);
    }
    return bean;
}


我也可能会提交PR来将属性添加到Spring Boot本身。

关于java - 如何扩展Spring Boot的DataSourceAutoConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256685/

相关文章:

java - 将字符串的ArrayList拆分为另一个StringArray,返回类型为List,而不是void

javascript - 为什么我无法读取在POST中收到的参数?

java - Spring Boot SessionRegistry返回主体的空列表

javascript - 在Spring Controller 中,我得到的日期早于我发送的实际日期

java - Intellij Spring Boot扩展过程gradle构建文件中的资源以替换属性

java - Spring Boot 2 和 JUnit 5 的正确配置

java - 在netbeans ide中仅创建一个项目包的jar文件

java - 手动执行CORS

java - Android - 在应用程序中创建符号链接(symbolic link)

java - Spring AOP,根据路径变量名触发切入点