HibernateException:连接太多,使用c3p0

时间:2016-09-23 13:08:02

标签: java hibernate c3p0

我使用c3p0创建了hibernate应用程序来访问我的数据库,

这是我的 hibernate.cfg.xml

<?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="show_sql">true</property>
    <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/example</property>
    <property name="hibernate.connection.username">******</property>  
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">3000</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.c3p0.idle_test_period">300</property>
    <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
    <property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property>
    <property name="hibernate.connection.password">*******</property>
    <mapping resource="beans/Reminder.hbm.xml"/>
    <mapping resource="beans/StressType.hbm.xml"/>
    <mapping resource="beans/Medication.hbm.xml"/>
    <mapping resource="beans/ReportType.hbm.xml"/>
    <mapping resource="beans/Comobility.hbm.xml"/>
    <mapping resource="beans/Report.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

这是我的HibernateUtil文件。我把它命名为 SessionFactoryBuilder.java

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class SessionFactoryBuilder
{
    private static SessionFactoryBuilder instance;
    private static SessionFactory sessionFactory;

    private SessionFactoryBuilder()
    {
        buildConfig();
        System.out.println("hehehehe");
    }

    private static void buildConfig()
    {
        Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                            .applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory(builder.build());
    }

    public static SessionFactoryBuilder getInstance()
    {
         if(instance == null) 
         {
            instance = new SessionFactoryBuilder();

         }
      return instance;
    }

    public SessionFactory getSessionFactory()
    {
        return sessionFactory;
    }  

}

当我使用此SessionFactoryBuilder访问我的数据库时,我会关注“连接太多”

这是我使用它的一个例子,

ReportTypeService reportTypeService = new ReportTypeService();

List<ReportType> list = reportTypeService.getAllReportTypes();
for(int i=0;i<list.size();i++){
     out.print("Type - "+list.get(i).getType());
}

这种情况并非一直存在。但是当它出现时,与数据库的连接已经消失。

有任何想法吗?

0 个答案:

没有答案