dbcp2 connectionpooling открывает больше максимального количества соединений и не использует повторно из пула
Я настроил источник данных с помощью аннотаций в моем классе AppConfig
@Bean(destroyMethod = "close")
public BasicDataSource basicDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl(env.getRequiredProperty("jdbc.url"));
dataSource.setUsername(env.getRequiredProperty("jdbc.username"));
dataSource.setPassword(env.getRequiredProperty("jdbc.password"));
dataSource.setValidationQuery("SELECT 1 from dual");
dataSource.setMaxIdle(40);
dataSource.setMaxTotal(50);
dataSource.setMinIdle(20);
dataSource.setMaxWaitMillis(5000);
dataSource.setTestOnBorrow(true);
dataSource.setTestOnReturn(true);
dataSource.setTestWhileIdle(true);
dataSource.setTimeBetweenEvictionRunsMillis(30000);
dataSource.setRemoveAbandonedOnBorrow(true);
dataSource.setRemoveAbandonedTimeout(30);
dataSource.setNumTestsPerEvictionRun(3);
dataSource.setMinEvictableIdleTimeMillis(1800000);
return dataSource;
}
В моем проекте MVC я создал компонент JDBCService, в котором я создал объект jdbcTemplate и инициализировал его с источником данных.
@Component
public class JDBCService {
JdbcTemplate jdbcTemplate;
public void resetAllVariables() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class);
ctx.refresh();
DataSource dataSource = (DataSource) ctx.getBean("basicDataSource");
jdbcTemplate = new JdbcTemplate(dataSource);
}
//other functions like updateQuery(String sQuery, Object[] params)
.....
}
По всему моему приложению я делаю различные вызовы JDBCService и выполняю SQL-операторы. На некоторых страницах есть несколько вызовов db.One:
class SearchService {
JDBCService jdbcService = new JDBCService();
jdbcService.resetAllVariable();
jdbcService.updateQuery(....);
}
В сеансе v$ я вижу, что при запуске jMeter он не создает пул, а продолжает создавать соединение. Таким образом, мое приложение не работает, когда оно достигает 990 соединений, потому что это ограничение, установленное нашим администратором базы данных. Почему пул не работает? Другой тест, который я провел, был в виде одного сеанса - каждый раз, когда я перезагружаю одну и ту же страницу, я вижу, что создаются 4 новых сеанса БД. Каждая перезагрузка добавляет еще 4 сеанса БД. Если бы я уменьшил свой maxTotal до 8, не должно ли максимальное количество соединений только что перейти к 8 и не больше.