Похоже, у моего сервиса утечка соединения с базой данных. Вчера после перераспределения я упомянул, что было 27 открытых соединений с базой данных postgres. Этим утром им исполняется 60 лет.
Выполняя этот запрос к моей базе данных, я вижу, что время последнего использования некоторых соединений было только вчера.
SELECT * FROM pg_stat_activity
ORDER BY state_change DESC
Кажется, что мой jdbcTemplate должен закрыть их, но он этого не сделал.
Вот моя конфигурация
@Configuration
public class DatabaseConfiguration {
// reading data from application properties
// ........
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;
configuredDataSource.setTestWhileIdle(connectionTestWhileIdle);
configuredDataSource.setValidationQuery( connectionValidationQuery);
configuredDataSource.setTimeBetweenEvictionRunsMillis(
toIntExact(connectionTimeBetweenEvictionRunsMillis));
return configuredDataSource;
}
@Bean(name = "qaDataSource")
public JdbcTemplate getQaJdbcTemplate() {
DataSource ds = configureDataSource(qaURL, qaUsername, qaPassword ,qaDriverClassName);
return new JdbcTemplate(ds);
}
Есть идеи, что не так с моей конфигурацией? Или, может быть, это неправильная конфигурация базы данных.