【发布时间】:2015-01-13 06:59:48
【问题描述】:
我有一个简单的应用程序来演示 Spring 和 Hibernate 的集成。 howtodoinjava - link.
我的 pom.xml 中有 commons-dbcp 和 commons-pool 依赖项,都是 1.4 版
以下是我的休眠配置:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.provider_class">
com.brs.dao.DBCPConnectionProvider
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">****</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="hibernate.dbcp.initialSize">8</property>
<property name="hibernate.dbcp.maxActive">20</property>
<property name="hibernate.dbcp.maxIdle">20</property>
<property name="hibernate.dbcp.minIdle">0</property>
<property name="hibernate.dbcp.validationQuery">SELECT 1</property>
<mapping class="com.brs.entity.EmployeeEntity"/>
</session-factory>
</hibernate-configuration>
我已经按照以下教程进行操作
http://www.mkyong.com/hibernate/how-to-configure-dbcp-connection-pool-in-hibernate/
配置池。当我运行应用程序时,我得到以下日志
11:42:11,259 INFO [com.brs.dao.DBCPConnectionProvider] (http--127.0.0.1-8080-1) active: 1 (max: 20) idle: 7(max: 20)
11:42:11,263 INFO [stdout] (http--127.0.0.1-8080-1) Hibernate: select employeeen0_.f_id as f1_2_, employeeen0_.f_email as f2_2_, employeeen0_.f_first_name as f3_2_, employeeen0_.f_last_name as f4_2_, employeeen0_.f_telephone as f5_2_ from t_employee employeeen0_
11:42:11,273 INFO [com.brs.dao.DBCPConnectionProvider] (http--127.0.0.1-8080-1) active: 0 (max: 20) idle: 8(max: 20)
这是预期的行为,因为空闲连接数为 8。但是,当我使用 MySql Workbench 时,show processlist; 我看到多达 18 个连接(2 个默认值 + 16 个应用程序)。
应用程序只是在数据库中保存一个对象。就这样。那为什么 Workbench 显示 16 个连接,而应用程序的日志显示只有 8 个连接空闲?当我停止应用程序服务器时,工作台中与同一模式的连接数为 2(默认)。这是什么意思呢? 有人可以解释发生了什么吗?
更新:抱歉,连接提供程序的软件包名称具有误导性。由于我已从以下链接复制代码,因此我的 IDE 已更改包名称。
连接提供者链接是http://wiki.apache.org/commons/DBCP/Hibernate。
【问题讨论】:
-
您的配置中允许 20 个连接。您允许 20 个连接空闲。在我看来,您的池将从 8 个连接开始,最多打开 12 个连接。
-
@Hannes 正确。但是为什么 MySql 工作台在睡眠模式下显示 16 个连接,而应用程序最初只创建 8 个?还是我错过了什么?
-
对不起。我不认识您的 dbac 提供程序类。看看它。也许它会根据您的配置计算实际的池大小,或者有一个默认值。
-
Hannes 是对的,我也能认出你的 dbcp 提供者。顺便说一句,不要使用 root 用户连接到数据库。如果我没记错的话,如果出现问题并且您在数据库配置中访问了
max_connections,那么root 用户(或任何具有超级权限的用户)始终可以连接到数据库。使用 root 用户将阻止您访问最后一个连接。
标签: java mysql spring hibernate mysql-workbench