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 - @Transactional 注释未按预期工作

java - 如何避免 Mongodb 中重复的对象条目?

java - 使用 Java 复制目录内容

java - GWT:如何处理 mouseUp 事件?

从 jar 运行时 CSS 未在 Spring Boot 中加载

java - spring-boot-starter-amqp 依赖导致 StackOverflowError

java - 如何使用java spring boot应用程序制作持久的JMS消息?

java - 如何将 Unicode(孟加拉字体)打印到热敏打印机?

java - 如何在 POST 方法(RestTemplate)中将 List<Objects> 作为正文传递

java - 无法转换为 java.base/java.util.Optional