随笔-46  评论-54  文章-0  trackbacks-0
最近用 Hibernate 3 连接 Mysql 4 数据库。
调试时都还好,真正发布的时候毛病来了。
每天早晨都要都会报错,不能正常操作数据库。
Mysql 重启,无效,Tomcat 重启,有效。

Mysql(MySQL 4.1) 文档 7.5.2 节
Tuning Server Parameters 里面
在 Mysql控制台下输入 SHOW VARIABLES;
最后一个参数
wait_timeout    28800
如果单位是秒,也就是 8 个小时。
程序最后一次建立连接完毕之后 8 个小时,
Mysql 单方面关闭了这个连接。
但 Hibernate 还在记忆着这个连接基本信息。
程序再次连接的时候,已经不存在了。

不过,Hibernate 可以设置它自己的 timeout 。
到了 Hibernate 3 默认第三方的连接池管理,
由 Apache 的 DBCP 项目更换成了 c3p0 项目
它的属性在 Hibernate 配置属性有对应的写法,如:
c3p0.maxIdleTime = hibernate.c3p0.timeout
c3p0.maxPoolSize = hibernate.c3p0.max_size
所以,要修改一下 hibernate.cfg.xml 文档
将 Hibernate 默认连接池参数
<property name="connection.pool_size">5</property>
删除或注释掉,Hibernate 默认连接池比较初级。
然后,加入以下属性
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_size">5</property>
就可以使用 c3p0 来管理连接池了。
其实这些属性的参数名都可以在 Hibernate 文档 3.3 节
JDBC connections 里面找到。
按照相应的格式更改名字和值就可以了。

posted on 2006-02-14 19:43 rox 阅读(12484) 评论(5)  编辑  收藏 所属分类: hibernate

评论:
# re: Hibernate与Mysql使用c3p0连接池时的一点注意。 2006-03-15 21:58 | rox
在尝试了修改hibernate c3p0设置,更改为使用Tomcat自己的连接池后仍然没有改善。
决定从根源入手,设置mysql的wait_timeout为31536000(一年),再来试试。

[mysqld]
set-variable=wait_timeout=31536000
set-variable=interactive_timeout=31536000

仍然没有改善,看来是代码有问题。  回复  更多评论
  
# 转贴 风间小筑 的 c3p0 & proxool 2006-04-14 14:10 | rox
他的Blog已经不能访问了,这些内容都是用Google的网页快照找来的。

前一段时间用c3p0作hibernate3的连接池,发现连接数总是很多,并不能释放,用几天就会占用100多个数据库连接,尝试修改了几次配置文件问题依旧,无奈换成了proxool,问题居然解决了。

c3p0配置
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>

proxool配置
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">xjgame</property>
<property name="hibernate.proxool.xml">proxool.xml</property>


<?xml version="1.0" encoding="ISO-8859-1"?>
<something-else-entirely>
<proxool>
<alias>xjgame</alias>
<driver-url>jdbc:oracle:thin:@123.123.123.12:1521:game</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="a"/>
<property name="password" value="a"/>
</driver-properties>
<maximum-connection-count>20</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE from dual</house-keeping-test-sql>
</proxool>
</something-else-entirely>  回复  更多评论
  
# re: Hibernate与Mysql使用c3p0连接池时的一点注意。 2009-05-25 13:28 | 深泉
我是hibernate+c3p0+mysql
映射的表又12张,由12个VO对象和表发生映射关系,在初始化hibernate的时候,c3p0连接池初始化了12次,每次由于一开始设置的initialPoolSize=3,所以等启动完毕,tomcat就产生了36个连接。请问这是怎么回事,是c3p0的默认方式吗?
找了很多资料都没有找到相关资料。  回复  更多评论
  
# re: Hibernate与Mysql使用c3p0连接池时的一点注意。 2009-05-25 14:28 | rox
@深泉
不好意思,c3p0是因为当时对hibernate不是很熟,有频繁出现错误,没有办法才转的。
后来发现,还是自己代码的问题。
现在主要还是使用DBCP。
确认一下sessionFactory没有重复配置。
另外,initialPoolSize=3,只是初始连接池的大小,并不会对每个连接重复复制,即使是代码或者配置的错误,也不应该出现36的现象。
你可以试试,换成DBCP的试试,这种现象有没有再次出现。  回复  更多评论
  
# re: Hibernate与Mysql使用c3p0连接池时的一点注意。 2009-10-06 22:32 | wateray
>每次由于一开始设置的initialPoolSize=3,所以等启动完毕,tomcat就产生了36个连接。

----------我要出现这种情况,每次连接会创建initialPoolSize设定的个数。
不要设置属性!!!
c3p0官方文档。
c3p0-native property name hibernate configuration key
c3p0.acquireIncrement hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
c3p0.initialPoolSize not available -- uses minimum size
c3p0.maxIdleTime hibernate.c3p0.timeout
c3p0.maxPoolSize hibernate.c3p0.max_size
c3p0.maxStatements hibernate.c3p0.max_statements
c3p0.minPoolSize hibernate.c3p0.min_size
c3p0.testConnectionsOnCheckout hibernate.c3p0.validate hibernate 2.x only!

在hibernate.cfx.hbm里面只能且必须设置上面这些属性,其中,c3p0.initialPoolSize 不能设置(也无法设置,没有对应的属性)。其他属性只能在单独的 c3p0.properties 里面设置。

http://www.mchange.com/projects/c3p0/index.html#initialPoolSize  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: