简体   繁体   English

配置Hibernate C3P0连接池

[英]Configure Hibernate C3P0 Connection Pooling

I'm stumbled upon a problem while developing a Web Application based on Struts2 with Spring and Hibernate. 我在使用Spring和Hibernate开发基于Struts2的Web应用程序时偶然发现了一个问题。

When I refresh the site a few times, for example 2-4 times, Hibernate is showing up an exception about Too many connections . 当我刷新网站几次,例如2-4次时,Hibernate出现了一个关于太多连接的例外。 I've tried to implement C3P0 Connection pool and have some problems with it 我试图实现C3P0连接池,并遇到一些问题


The hibernate.cfg.xml configuration: hibernate.cfg.xml配置:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/axelle</property>
<property name="hibernate.connection.username">axelle</property>
<property name="hibernate.connection.password">dbpassword</property>
<property name="hibernate.current_session_context_class">thread</property>    

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>

applicationContext.xml applicationContext.xml中

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="classpath:jdbc.properties"/>

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}"
      p:connectionProperties="${jdbc.connectionProperties}"/>

<!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory"/>
    </property>
</bean>

The log output is: 日志输出是:

org.hibernate.exception.JDBCConnectionException: Cannot open connection

and: 和:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

And this is how PROCESSLIST MySQL window looks: http://img844.imageshack.us/img844/3959/be69273cc2.png 这就是PROCESSLIST MySQL窗口的外观: http//img844.imageshack.us/img844/3959/be69273cc2.png


I've set max_size of connections to 20, but it seems like it doesn't read the C3P0 configuration from file, cause from the screen we can see that number of connections is higher than 20, or maybe I'm doing something wrong, but where? 我已经将连接的max_size设置为20,但它似乎没有从文件中读取C3P0配置,因为从屏幕我们可以看到连接数高于20,或者我可能做错了什么,但是哪里? I really need some help guys, I'll appreciate this, and thanks in advance. 我真的需要一些帮助,我会很感激,并提前感谢。

Mention these property in your hibernate.cfg.xml file 在hibernate.cfg.xml文件中提到这些属性

    <property name="hibernate.c3p0.acquire_increment">1</property>
    <property name="hibernate.c3p0.idle_test_period">100</property>
    <property name="hibernate.c3p0.max_size">10</property>
    <property name="hibernate.c3p0.max_statements">10</property>
    <property name="hibernate.c3p0.min_size">10</property>
    <property name="hibernate.c3p0.timeout">100</property>

Refer this link for better understanding: Configuration Properties 请参阅此链接以获得更好的理解: 配置属性

在您的applicationContext中,而不是使用<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" ...尝试使用<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" ... C3P0PooledDataSource将使用指定的DriverClassName,url,用户名和密码创建一个包装的数据库连接

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM