hibernate+spring中连接池c3p0不能释放连接

qwerasdf123 2010-06-02 05:09:58
如题:
application.xml连接池配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost/icrom?useUnicode=true&characterEncoding=utf-8</value> </property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>12345678</value>
</property>
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>30</value>
</property>
<property name="initialPoolSize">
<value>10</value>
</property>
<property name="maxIdleTime">
<value>60</value>
</property>
<property name="acquireIncrement">
<value>3</value>
</property>
<property name="maxStatements">
<value>0</value>
</property>
<property name="maxStatementsPerConnection">
<value>0</value>
</property>
<property name="idleConnectionTestPeriod">
<value>28680</value>
</property>
<property name="acquireRetryAttempts">
<value>30</value>
</property>
<property name="breakAfterAcquireFailure">
<value>false</value>
</property>
<property name="testConnectionOnCheckout">
<value>false</value>
</property>
</bean>

程序中使用查询部分的代码:

public AbstractPersistentObject findById(Class<?> klass, Integer id) {
log.debug("getting " + klass.getName() + " instance with id: " + id);
try {
AbstractPersistentObject instance = (AbstractPersistentObject)
getHibernateTemplate()
.get(klass, id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}

结果是每查询30次就一直阻塞在那里了,因为连接池的连接已经用完了!显示的日志是:
opening JDBC connection
acquire test -- pool size: 29; target_pool_size: 29; desired target? 30
incremented pending_acquires: 1
awaitAvailable(): com.mchange.v2.c3p0.impl.NewPooledConnection@280bca
trace com.mchange.v2.resourcepool.BasicResourcePool@6c01b9 [managed: 29, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@280bca)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager@b52598.acquireResource() returning.
trace com.mchange.v2.resourcepool.BasicResourcePool@6c01b9 [managed: 30, unused: 1, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@280bca)
decremented pending_acquires: 0
trace com.mchange.v2.resourcepool.BasicResourcePool@6c01b9 [managed: 30, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@280bca)
.
.
.
.
initializing non-lazy collections
after autocommit
transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
after transaction completion
Eagerly flushing Hibernate session
flushing session
processing flush-time cascades
dirty checking collections
Flushing entities and processing referenced collections
Processing unreferenced collections
Scheduling collection removes/(re)creates/updates
Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
listing entities:
cn.icrom.biz.datapackage.news.object.NEWS_DATA_EXISTS{id=component[ID,DATA_FID,KODE,PUBLISH_DATE]{DATA_FID=9340, KODE=33cca49be6f395c739fa793b6bba0f5d, PUBLISH_DATE=2010-03-25 00:00:00, ID=9334}}
executing flush
registering flush begin
registering flush end
post flush
Registering Hibernate Session for deferred close
setting flush mode to: NEVER
Read class cn.icrom.biz.datapackage.news.object.NEWS_DATA detail data.
Returning cached instance of singleton bean 'BaseHibernateDAO'
getting cn.icrom.biz.datapackage.news.object.NEWS_DATA instance with id: 9340
Opening Hibernate Session
opened session at timestamp: 12754676400
loading entity: [cn.icrom.biz.datapackage.news.object.NEWS_DATA#9340]
attempting to resolve: [cn.icrom.biz.datapackage.news.object.NEWS_DATA#9340]
object not resolved in any cache: [cn.icrom.biz.datapackage.news.object.NEWS_DATA#9340]
Fetching entity: [cn.icrom.biz.datapackage.news.object.NEWS_DATA#9340]
loading entity: [cn.icrom.biz.datapackage.news.object.NEWS_DATA#9340]
about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
opening JDBC connection
acquire test -- pool is already maxed out. [managed: 30; max: 30]


求解呀!
请教对这连接池比较了解的朋友,怎么来解决这问题?是哪里有问题的呢?
...全文
3598 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nookiehuihui 2012-07-18
  • 打赏
  • 举报
回复
lz的方法管用,我也碰到这样的问题,谢谢了,但还是不明白我手动关闭了session,sessionFactory,但数据库的链接还是满了
gy132 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qwerasdf123 的回复:]
问题已经解决,原来在配置hibernater时少配了一个属性:
<prop key="hibernate.connection.release_mode">after_statement</prop>
唉!不懂是此属性值默认是on_close,就是session.close();时关闭连接,但我在调用这查询时,使用手动session.close();还是一样的结果。。。。
[/Quote]
根据你的答案,我已经解决了我认为是非常苦恼的疑难杂证,
求大神指点。。你是肿么分析的问题呢。。。。按我的解决问题模式先搜索,如未果,就有郁闷了。。。
shanxisxx 2010-09-15
  • 打赏
  • 举报
回复
的撒发生
qwerasdf123 2010-06-08
  • 打赏
  • 举报
回复
问题已经解决,原来在配置hibernater时少配了一个属性:
<prop key="hibernate.connection.release_mode">after_statement</prop>
唉!不懂是此属性值默认是on_close,就是session.close();时关闭连接,但我在调用这查询时,使用手动session.close();还是一样的结果。。。。
qwerasdf123 2010-06-04
  • 打赏
  • 举报
回复
我也是这么想的!但就是不知道为什么!我使用这查询后就是不生释放这连接,然后程序循环使用了
30次后就报错说没有连接可以使用了!
不知道原因呀!
zhanlang9075 2010-06-04
  • 打赏
  • 举报
回复
1。你的配置信息是配置在spring主配置文件里的,所以spring会帮你关闭数据库连接
2。spring会在c3p0被使用后的基础上进行关闭。
qwerasdf123 2010-06-04
  • 打赏
  • 举报
回复
这个关闭连接不是由连接池管理的吗!
我这里使用的是C3PO连接池管理这些连接,的
我这应用并没有使用声明式事务,
这种情况下SPRING,或者c3p0不会自己去关闭连接吗!?
qunhao 2010-06-02
  • 打赏
  • 举报
回复
我前段时间也遇到过这个问题。
我后来检查发现,原来是程序中获取session进行操作后没有关闭,导致占用数据库连接没有释放。后来用完session把它给close了,就不再出现这个问题了。
说明一下:如果有用spring的声明式事务的话,那么通过this.getSesson()获取到的session是不需要关闭的,spring的事务会去管理。

楼主你的问题好像也应该差不多是这样
英文我看不太懂,不过我估计你的错误信息中下面这一句是关键,你从这入手去查查。
transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
这是一个实际使用的项目,可访问 http://cdbke.cuit.edu.cn 可查看效果及功能,后台需要登录后才能使用(出于安全性考虑这里就不给大家介绍了,另外还有一个struts1版本的,如有需要可以与我联系)。 此项目整合了目前主流和最前源的web开发技术:采用ehcache实现二级缓存(包含查询缓存);用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者最优秀的)做连接;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发的。虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多朋友下了觉得对他们有帮助,所以我才再发了一个第二版,希望对有需要的朋友有所帮助。本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范检查,代码审查等功能(与此相关的jar包由于上传文件大小限制未导入) 本系统一直在使用,所以还会不段更新,之后我打算再做一个基于javaee6的实现,给需要想学习ejb3.1等技术的朋友一个参考实现 集成测试相关jar包和更新构建脚本下载:http://download.csdn.net/source/2427972

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧