我是靠谱客的博主 舒心面包,最近开发中收集的这篇文章主要介绍c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

近期写了一个数据库採集程序,大概过程是将SQLSERVER数据库的数据定时採集到Oracle数据库。

1小时出一次数据,每次数据量在2W左右。环境採用Sping3+hibernate4,数据库连接池採用C3p0

奇怪的时候每隔一段时间都会报:“c3p0 connection is already closed”

我開始的数据库连接池配置例如以下:oracle数据库开启事务,而採集的sqlserver数据库没有开启事务

jdbc.driverClass=oracle.jdbc.OracleDriver

jdbc.jdbcUrl=jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.12.18.240)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))

jdbc.user=appds

jdbc.password=appds

c3p0.acquireIncrement=5

c3p0.maxIdleTime=60

c3p0.maxPoolSize=80

c3p0.minPoolSize=10

c3p0.initialPoolSize=10

c3p0.maxStatements=0

c3p0.idleConnectionTestPeriod=60

c3p0.acquireRetryAttempts=30

c3p0.acquireRetryDelay=1000

c3p0.breakAfterAcquireFailure=false

c3p0.testConnectionOnCheckout=false

jdbcdata.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver

jdbcdata.jdbcUrl=jdbc:sqlserver://10.12.18.241:1433;databaseName=data;

jdbcdata.user=cawasdatauser

jdbcdata.password=cawas606

c3p0ObsDataDB.maxPoolSize=30发现了问题,我首先在c3p0上加上调试信息的配置:

c3p0.debugUnreturnedConnectionStackTraces=true

c3p0.unreturnedConnectionTimeout=90 (我的连接超时时间是60s。所以这设置了90s)

applicationContext数据源配置添加响应配置

果然发现非常多未回收的连接,正常情况下超时未回收的连接会有一些。可是不会这么多啊。

经查资料在hibernate sessionFacory中添加配置(http://hi.baidu.com/austincao/item/fc9907da3d854e44fa576861)

Spring3.1去掉了HibernateDaoSupport类。

hibernate4须要通过getCurrentSession()获取session。而且设置

org.springframework.orm.hibernate4.SpringSessionContext

在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:

hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext。

另外在hibernate中使用sessionFactory.getCurrentSession()获取session时,须要为方法声明事务。为此将sqlserver

採集的代码也加上事务

最后

以上就是舒心面包为你收集整理的c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查的全部内容,希望文章能够帮你解决c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部