在Tomcat启动时,Apache DBCP2连接池比maxTotal打开更多的MYSQL连接

时间:2017-08-18 04:43:09

标签: java mysql tomcat

我在Apache Tomcat 8.5.16中配置了Apache DBCP2 JNDI数据源。 context.xml中的My Resource标签如下所示。

<Resource auth="Container"
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.cj.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mydb?autoReconnect=true&amp;useSSL=false"
    username="root"
    password="mypassword"
    name="jdbc/myDS"
    initialSize="5"
    minIdle="5" 
    maxIdle="10"
    maxTotal="20"
    testOnCreate="true"
    testOnBorrow="true" 
    testOnReturn="true"
    testWhileIdle="true"
    validationQuery="SELECT 1 from dual"
    validationQueryTimeout="60"
    timeBetweenEvictionRunsMillis="180000"
    numTestsPerEvictionRun="10"
    softMinEvictableIdleTimeMillis="150000"
    maxConnLifetimeMillis="300000"
    logAbandoned="true"
    removeAbandonedOnBorrow="true"
    removeAbandonedOnMaintenance="true" 
    removeAbandonedTimeout="60"
    maxWaitMillis="60000" />

我的问题是:

  1. 我启动了tomcat(我还没有在tomcat上部署任何应用程序)。我打开了MYSQL客户端终端,以root身份登录。现在当我运行命令 show processlist 时,我看到31个连接。 1来自MYSQL客户端,30来自tomcat。当我的maxTotal为20时,为什么DBCP2已获得30个连接?不,除了tomcat和MYSQL客户端之外,其他人正在使用MYSQL。
  2. 由于我没有在tomcat上部署任何应用程序来使用JNDI数据源所有来自DBCP2的连接都是空闲的。 timeBetweenEvictionRunsMillis =“180000”未删除这些空闲连接。
  3. 当我删除 minIdle =“5”时。然后在180000毫秒之后,所有30个MYSQL连接都从连接池中删除,连接池大小变为零。
  4. 帮助我理解这种行为。谢谢你的提前。

1 个答案:

答案 0 :(得分:0)

对不起大家。这是我理解中的错误。我使用的Tomcat 8.5.16已经在 webapps 目录中有6个应用程序(ROOT,docs,examples,host-manager,manager等)。因为,我在tomcat的conf目录的context.xml中创建了Apache DBCP2 JNDI数据源,Tomcat为webapps目录中的每个应用程序创建了6个连接池,其中 initialSize =“5”。我需要重新访问我的JNDI数据源配置,以便限制它被1个应用程序使用 谢谢大家路过。