Ich habe dieses Problem vor und finde eine solche Lösung; diese Parameter auf application.properties Einstellung:
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1
aber es hat für mich mit meiner Feder-Boot-Version nicht funktioniert. Dann habe ich die Tomcat jdbc Datenquelle factory Felder überprüft und festgestellt, dass die Felder der dataSourceFactory nicht erfolgreich von application.properties Konfigurationen festgelegt sind.
Schließlich beschloß ich es durch diese Felder nach der Initialisierung der Anwendung einstellen, und meine Verbindung zurückgesetzt Problem behoben .:
@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;
}
}