2012-06-11 32 views
2

我剛剛接到Hosting公司的電話,他們聲稱我的應用程序創建了超過400個連接到mysql數據庫並導致他們的dbms崩潰了一些! 我使用Hibernate和C3P0作爲連接池,這裏是我的Hibernate配置文件,c3p0創建瞭如此多的連接

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url"> 
      jdbc:mysql://localhost/music?characterEncoding=UTF-8 
    </property> 
    <property name="connection.username">USER</property> 
    <property name="connection.password">PASS</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="current_session_context_class">thread</property> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <property name="hbm2ddl.auto">update</property> 

    <property name="hibernate.max_fetch_depth">3</property> 

    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <property name="hibernate.c3p0.acquire_increment">2</property> 
    <property name="hibernate.c3p0.idle_test_period">300</property> 
    <property name="hibernate.c3p0.timeout">1800</property> 
    <property name="hibernate.c3p0.max_size">25</property> 
    <property name="hibernate.c3p0.min_size" >3</property> 
    <property name="hibernate.c3p0.max_statement">0</property> 
    <property name="hibernate.c3p0.preferredTestQuery">select 1;</property> 
    <property name="hibernate.c3p0.testConnectionOnCheckout">true</property> 
    <property name="hibernate.c3p0.validate">true</property>  

    <mapping resource="com/roodakimusic/hibernate/resources/Article.hbm.xml"/> 
    <mapping resource="com/roodakimusic/hibernate/resources/News.hbm.xml"/> 
    <mapping resource="com/roodakimusic/hibernate/resources/Admin.hbm.xml"/> 
    <mapping resource="com/roodakimusic/hibernate/resources/Maestro.hbm.xml"/> 
    <mapping resource="com/roodakimusic/hibernate/resources/Roodaki.hbm.xml"/> 
    <mapping resource="com/roodakimusic/hibernate/resources/Photo.hbm.xml"/>  


    </session-factory> 
</hibernate-configuration> 

和MySQL和應用程序之間的任何對話都是這樣

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    //session.doSomething 
    session.getTransaction().commit(); 

有什麼不對嗎? :D --edit - 有人說它可能是一個jdbc連接器版本。

+0

您的c3p0配置如何? – DerMike

+0

c3p0配置在hibernate配置裏面。不是嗎? – MoienGK

+0

http://stackoverflow.com/questions/3768263/how-can-i-prevent-hibernate-c3p0-mysql-creating-large-numbers-of-sleeping-co?rq=1 – rkosegi

回答

0

未來! :

已解決。 。 的問題是在我的HibernateUtil.java,這條線是問題:

回報新配置()配置()buildSessionFactory();

+0

問題是什麼,你是如何解決它的? – AndroidDev

+0

@AndroidDev這是幾個世紀前:))。我提到的那條線是每次都創建一個新的會話工廠。這是hibernate配置的問題 – MoienGK