mysql show processlist显示了11个永不消失的连接

时间:2015-12-04 13:22:02

标签: java mysql spring jdbc

我有一个使用javax.sql.DataSource的网络服务,如下所示:

public class AccessMysql {

 private static DataSource dataSource=null;

    public  AccessMysql(){
      if (dataSource == null){
        dataSource = DataSourceBuilder
                .create()
                .username("[username]")
                .password("[password]")
                .url("jdbc:mysql://[server]/testdb")
                .driverClassName("com.mysql.jdbc.Driver")
                .build();
      }
    }
...
}

此类第一次运行以下mysql命令:

show processlist

显示了11个连接。

该服务可以多次访问数据库,我的连接数(如通过'显示进程列表'所示)始终保持在11。

这11个连接是否会自行消失?有什么方法可以从Java中关闭它们吗?

1 个答案:

答案 0 :(得分:0)

如果您检查DataSourceBuilder的代码,您会看到如果它没有您的具体说明,它将创建一个合并的数据源(类型因可用而异)类路径上的类):

private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
        "org.apache.tomcat.jdbc.pool.DataSource",
        "com.zaxxer.hikari.HikariDataSource",
        "org.apache.commons.dbcp.BasicDataSource" };

这些池数据源将保持打开X(在您的情况下可能为10个)连接数,以便在需要时节省打开新连接的时间。这是connection-pooling的概念。