![](/img/trans.png)
[英]how to implement DataSourceAutoConfiguration in spring boot
[英]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.