繁体   English   中英

如何扩展Spring Boot的DataSourceAutoConfiguration

[英]How to extend Spring Boot's DataSourceAutoConfiguration

我希望能够利用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 : logValidationErrors

我用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本身。

有多种方法可以解决此问题。

首先,您可能要针对spring boot项目提交对TomcatDataSourceConfiguration的拉取请求。 添加这些依赖关系很简单(请查看源代码中的validationInterval作为示例。

或者,您可以按照自己的方式创建自己的数据源。 如果存在DataSource bean,则启动将不会尝试创建自己的bean。 然后,您可以从TomcatDataSourceConfiguration扩展并通过覆盖dataSource添加所需的任何属性。 最后,您应该导入扩展类,以便注册Bean,这将为其禁用自动配置。

如果您选择了最后一个选项并且对您有用,那么如果您认为这些属性对于更广泛的受众而言可能会很有趣,那么仍然值得报告这些属性的问题

如果您是我,我将只是@Autowire现有的DataSource ,根据需要向下转换,然后设置多余的属性。 对于某些bean这样做(如果它们从其属性进行初始化)可能会很危险,但是我怀疑这是否会成为问题。

暂无
暂无

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

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