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 и не больше.

0 ответов

Другие вопросы по тегам