2017-05-12 43 views

回答

0

我以前遇到過這個問題,並找到這樣的解決方案;在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; 
    } 
} 
相關問題