« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9706266 建立时间:2004年12月20日 |

| |
[j2ee]spring和hibernate的不释放连接的问题 原创空间, 软件技术
邢红瑞 发表于 2005/3/14 18:48:25 |
spring+hibernate使用c3p0的连接池,发现这样的一个问题,只要是hibernate访问的数据库,连接不会释放。很快连接被用光,pool is blocked。配置文件 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${db.driver}</value> </property> <property name="jdbcUrl"> <value>${db.url}</value> </property> <property name="user"> <value>${db.username}</value> </property> <property name="password"> <value>${db.password}</value> </property> <property name="autoCommitOnClose"> <value>true</value> </property> <property name="checkoutTimeout"> <value>5000</value> </property> </bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" destroy-method="close"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="mappingResources"> <list> <value>Jobs.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.autocommit">true</prop> <prop key="hibernate.hbm2ddl.auto">${db.createupdate}</prop> <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.c3p0.min_size">${db.pool.minsize}</prop> <prop key="hibernate.c3p0.max_size">${db.pool.maxsize}</prop> <prop key="hibernate.c3p0.timeout">${db.pool.timeout}</prop> <prop key="hibernate.c3p0.max_statements">${db.pool.maxstatements}</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.transaction.auto_close_session">true</prop> </props> </property> </bean> <bean id="jobsDao" class="com.jicheng.dao.jdbc.FindJobsDaoJdbc"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="findJobsManager" class="com.jicheng.service.impl.FindJobsManagerImpl"> <property name="findJobsDao"> <ref bean="jobsDao"/> </property> </bean>代码public User getUserById(final int id) { return (User) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Connection conn = getSession().connection(); Statement stm = conn.createStatement(); ResultSet rs = stm.executeQuery(QueryStr); while (rs.next()) { // some processing } rs.close(); stm.close();
// it does not release even if conn.close() is called
return User;
} catch (Throwable t) { throw new RuntimeException(t); } } // doInHibernate }); } 看了看日志,连接确实没有被释放 ,如何查看日志看(http://blogger.org.cn/blog/more.asp?name=hongrui&id=11781),在找不到问题所在后,突然发现doInHibernate(Session session),既然传入session,就不能getSession()了。看来HibernateTemplate会确保Session正确的打开和关闭,并且会自动参与事务。 Template实例是线程安全的,可重用的,因此可以作为外部类的实例变量而被保持。 |
|
回复:spring和hibernate的不释放连接的问题 原创空间, 软件技术
hust(游客)发表评论于2009/1/16 16:28:17 |
我也碰到这个问题了,但是如何解决这个问题啊?你并没说啊email:hustlkq@126.com |
|
» 1 »
|