我以前遇到過這個問題,並找到這樣的解決方案;在application.properties設置這些參數:
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1
但它並沒有與我的彈簧引導版本爲我工作。然後我檢查了tomcat jdbc數據源工廠字段,並注意到dataSourceFactory的字段沒有通過application.properties配置成功設置。
最後我解決它通過設置在應用程序初始化這些領域,我的連接復位的問題解決:
@Component
public class PoolConfiguration implements BeanPostProcessor {
@Value("${spring.datasource.test-on-borrow:true}")
private boolean isTestOnBorrow;
@Value("${spring.datasource.test-while-idle:true}")
private boolean isTestWhileIdle;
@Value("${spring.datasource.validation-query:SELECT 1}")
private String validationQuery;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof TomcatJdbcDataSourceFactory) {
TomcatJdbcDataSourceFactory tomcatJdbcDataSourceFactory = (TomcatJdbcDataSourceFactory) bean;
tomcatJdbcDataSourceFactory.setTestOnBorrow(isTestOnBorrow);
tomcatJdbcDataSourceFactory.setTestWhileIdle(isTestWhileIdle);
tomcatJdbcDataSourceFactory.setValidationQuery(validationQuery);
}
return bean;
}
}