我有一个与mysql数据库交互的Web服务,我使用Hibernate进行数据访问。在生产环境中,我发现数据库服务器在经过一定时间(30分钟)后在其一侧关闭了连接,导致我的应用程序中出现此错误:
org.hibernate.SessionException: Session is closed!
。
我决定使用hibernate.c3p0
,并将这些属性添加到hibernate.cfg.xml
中:
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://xxxxx:xx/xx</property>
<property name="hibernate.connection.username">xxxx</property>
<property name="hibernate.connection.password">xxxx</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="show_sql">true</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">10</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.timeout">15</property>
<property name="c3p0.preferredTestQuery">select 1;</property>
要在localhost中测试这些属性,我在数据库中创建了一个名为testCnx
的新表,其中包含一列,并插入了一个value = 1,然后将idle_test_period
的值更改为10秒,timeout
至15秒,preferredTestQuery
至update testCnx set id=2 where id=1;
。
调用Web服务后,我等待了2分钟以上,但表中的值没有变化。我想知道hibernate.c3p0
是否是解决此问题的好方法
谢谢您的时间!