Поскольку у нас есть таймауты http внутри нашего кластера, кажется, что из-за этого происходит утечка соединения.Я исследовал и связь остается всегда активной.
Решением для меня было включить проверку оставленных соединений. Флаги
private DataSource configureDataSource(String url, String user, String password, String driverClassName){
DataSource ds = DataSourceBuilder.create()
.url(url)
.username(user)
.password(password)
.driverClassName(driverClassName)
.build();
org.apache.tomcat.jdbc.pool.DataSource configuredDataSource = (org.apache.tomcat.jdbc.pool.DataSource) ds;
// some other configurations here
// ...
configuredDataSource.getPoolProperties()
.setRemoveAbandonedTimeout(300);
configuredDataSource.getPoolProperties()
.setRemoveAbandoned(true);
}
@Bean(name = "qaDataSource")
public JdbcTemplate getQaJdbcTemplate() {
DataSource ds = configureDataSource(qaURL, qaUsername, qaPassword ,qaDriverClassName);
return new JdbcTemplate(ds);
}
RemoveAbandoned
и RemoveAbandonedTimeout
означают, что если какое-либо соединение находится в активном состоянии больше значения тайм-аута, оно будетзакрыто.Если вы добавите это в свой код, убедитесь, что это время ожидания превышает максимальное время выполнения запроса для вашей службы.