我有一个使用javax.sql.DataSource
的web服务,如下所示:
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个连接。
该服务可以多次访问数据库,我的连接数(如通过"show processlist"显示的)始终保持在11。
这11种联系会自行消失吗?有什么方法可以从Java关闭它们吗?
如果您检查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)个连接的打开状态,以节省在需要时打开新连接的时间。这就是连接池的概念。