Java 弹簧&x2B;冬眠+;DBCP配置问题

Java 弹簧&x2B;冬眠+;DBCP配置问题,java,mysql,spring,hibernate,mysql-workbench,Java,Mysql,Spring,Hibernate,Mysql Workbench,我有一个简单的应用程序来演示Spring和Hibernate的集成。 我在pom.xml中有commons dbcp和commons池依赖项,这两个版本都是1.4版 以下是我的hibernate配置: <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver&l

我有一个简单的应用程序来演示Spring和Hibernate的集成。

我在pom.xml中有commons dbcp和commons池依赖项,这两个版本都是1.4版

以下是我的hibernate配置:

<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>
配置池。当我运行应用程序时,我会得到以下日志

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工作台
时,显示processlist我看到多达18个连接(应用程序默认为2+16)

应用程序只需在数据库中保存一个对象。这就是全部。那么为什么Workbench显示16个连接,而应用程序日志显示只有8个连接空闲?当我停止应用服务器时,工作台中相同模式的连接数是2(默认值)。这一切意味着什么? 有人能解释发生了什么事吗

更新:很抱歉连接提供程序的程序包名称有误导性。由于我从下面的链接复制了代码,我的IDE更改了包名。

连接提供程序链接为
http://wiki.apache.org/commons/DBCP/Hibernate

我解决了连接池中初始连接数加倍的问题。问题与上述站点的示例代码有关。它对Spring上下文的配置错误。相同的xml文件包含在应用程序上下文和MVC上下文中。我浪费了很多时间才注意到

BasicDataSource
被实例化了两次。因此,连接数增加了一倍。
再次证明,不要盲目相信没有特定标准的教程。应遵循相应API的StackOverflow和官方文档

您的配置中允许20个连接。允许20个连接空闲。在我看来,您的池将从8个连接开始,最多打开12个连接。@Hannes正确。但是为什么MySql工作台在睡眠模式下显示16个连接,而应用程序最初只创建8个?还是我遗漏了什么。我不认识您的dbac提供程序类。看一看。可能它根据您的配置计算实际池大小,或者有一个默认值。Hannes是对的,我也可以识别您的dbcp提供程序。顺便说一下,不要使用root用户连接到数据库。如果我没记错的话,如果出现问题,并且您达到了db配置中允许的
max_connections
,则root用户(或任何具有超级权限的用户)始终可以连接到数据库。使用root用户将阻止您访问最后一个连接。
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)