dbcp2 connectionpooling打开的连接数超过了最大数量,并且没有从池中重用

时间:2018-08-01 15:15:48

标签: spring-mvc jdbctemplate apache-commons-dbcp

我已经通过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语句。某些页面有多个对数据库的调用。一个调用看起来像这样:

class SearchService {
    JDBCService jdbcService = new JDBCService();
    jdbcService.resetAllVariable();
    jdbcService.updateQuery(....);

}

我在v $ session中看到的是,当我运行jMeter时,它不会创建池,而是继续创建连接。因此,当我的应用程序达到990个连接时,它就会失败,因为我们的DBA设置了限制。为什么池不起作用? 我做的另一项测试是作为单个会话测试-每次重新加载同一页面时,都会看到创建了4个新的数据库会话。每次重新加载都会增加4个数据库会话。如果我将maxTotal减少到8,那么最大连接数应该不是刚好达到8,还是没有更多。

0 个答案:

没有答案