一次c3p0连接池连接异常错误的排查
2014-06-06 11:35
267 查看
最近写了一个数据库采集程序,大概过程是将SQLSERVER数据库的数据定时采集到Oracle数据库。1小时出一次数据,每次数据量在2W左右。环境采用Sping3+hibernate4,数据库连接池采用C3p0
奇怪的时候每隔一段时间都会报:“c3p0 connection is already closed”
我开始的数据库连接池配置如下:oracle数据库开启事务,而采集的sqlserver数据库没有开启事务
c3p0.debugUnreturnedConnectionStackTraces=true
c3p0.unreturnedConnectionTimeout=90 (我的连接超时时间是60s,所以这设置了90s)
applicationContext数据源配置增加响应配置
<property name="breakAfterAcquireFailure" value="${c3p0.breakAfterAcquireFailure}" />
<property name="testConnectionOnCheckout" value="${c3p0.testConnectionOnCheckout}" />
果然发现很多未回收的连接,正常情况下超时未回收的连接会有一些,但是不会这么多啊。
经查资料在hibernate sessionFacory中增加配置(http://hi.baidu.com/austincao/item/fc9907da3d854e44fa576861)
Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext。
另外在hibernate中使用sessionFactory.getCurrentSession()获取session时,需要为方法声明事务,为此将sqlserver
采集的代码也加上事务
奇怪的时候每隔一段时间都会报:“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数据源配置增加响应配置
<property name="breakAfterAcquireFailure" value="${c3p0.breakAfterAcquireFailure}" />
<property name="testConnectionOnCheckout" value="${c3p0.testConnectionOnCheckout}" />
果然发现很多未回收的连接,正常情况下超时未回收的连接会有一些,但是不会这么多啊。
经查资料在hibernate sessionFacory中增加配置(http://hi.baidu.com/austincao/item/fc9907da3d854e44fa576861)
Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext。
另外在hibernate中使用sessionFactory.getCurrentSession()获取session时,需要为方法声明事务,为此将sqlserver
采集的代码也加上事务
相关文章推荐
- 一次c3p0连接池连接异常错误的排查
- C3P0连接池连接异常错误解决
- C3P0连接池连接异常错误解决
- 一次tcp连接被reset的异常故障排查
- .net连接DB2的异常SQL0666 - SQL query exceeds specified time limit or storage limit.错误处理
- java web程序 jdbc连接数据库错误排查方法
- 一次 STATUS_STACK_BUFFER_OVERRUN 栈溢出错误排查
- 用Nhibernate连接多个数据库,两个Mysql,一个Sql。还有关于异常和错误码的讨论。包含源代码
- "已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)"
- druid获取连接超时异常排查
- (转载)MSSQL:Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。) - Empty.
- 一次小异常的排查,悲剧的无以复加!!!
- 开发常见错误解决(6)WSE3.0未处理的WebException,未处理的Web异常,基础连接以及关闭
- centOS5 配置网卡无法连接网络的一次错误-另追加centos6配置
- 出现错误,提示:各个节在每个配置文件中只能出现一次。有关异常的信息,请参阅帮助主题 <location>。请问
- 已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)
- ICF Internet 连接防火墙 当前在******上启用。要配置RRAS,请禁用ICF,然后再试一次的错误提示
- 抓到的一次suse11 xen用libvirt连接的错误
- msvcr90.dll 异常错误该从哪着手排查呢?
- 一次nginx 504 Gateway Time-out错误排查、解决记录