c3p0sqlserver 连接池配置 怎么配置sql 打印

跟踪 C3p0 连接池连接泄漏之参数优化与日志分析 - 赵士杰的博客 - ITeye技术网站
博客分类:
& &property name="unreturnedConnectionTimeout"&&value&100&/value&&/property&
& &property name="debugUnreturnedConnectionStackTraces"&&value&true&/value&&/property&
跟踪 C3p0 连接池连接泄漏
debugUnreturnedConnectionStackTraces、unreturnedConnectionTimeout参数的说明,此篇日志进一步介绍应用这两个参数后的一些经验。
首先,为了跟踪问题,debugUnreturnedConnectionStackTraces参数肯定是设置为true的。下面主要说明 unreturnedConnectionTimeout参数的设置,unreturnedConnectionTimeout参数是在连接被应用程序 checkout后指定时间内未checkin则由连接缓冲池执行kill操作,同时打印堆栈跟踪信息。在我的应用里,maxIdleTime的设置是 120秒,所以,我把unreturnedConnectionTimeout设置成150秒,如果达到最大存活时间后,连接还是不能被连接缓冲池正常关闭,那么肯定出现了连接泄漏,此时,再过30秒后,由连接缓冲池主动执行kill。
通过以上设置后,确实收获了一些成果,通过分析日志,找到了连接泄漏问题代码。异常信息如下:
15:49:42,599 INFO : com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1395) – Logging the stack trace by which the overdue resource was checked-out.
&&& java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace.
&&& at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:506)
&&& at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
&&& at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
&&& at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
&&& at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
&&& at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
&&& at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
&&& at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
&&& at org.hibernate.loader.Loader.doQuery(Loader.java:673)
&&& at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
&&& at org.hibernate.loader.Loader.doList(Loader.java:2220)
&&& at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
&&& at org.hibernate.loader.Loader.list(Loader.java:2099)
&&& at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
&&& at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
&&& at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
&&& at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
&&& at com.leo.dao.XXXDAO.queryXXX(XXXDAO.java:20)
&&& at jsp_servlet._keyareas._country.__taskcdb_add._jspService(__taskcdb_add.java:195)
&&& at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
&&& at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
&&& at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
&&& at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
&&& at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:416)
&&& at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:326)
&&& at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
&&& at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:526)
&&& at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:253)
通过堆栈信息,很容易就确认了问题点。这个问题点是由于DAO使用不规范导致的,XXXDAO继承了HibernateDaoSupport,在方法中使用了getHibernateTemplate().getSessionFactory().openSession()获得session,然后通过session.createSQLQuery(),随后却并没有执行session.close()。
关于日志大小:在目前 maxIdleTime=120,maxPoolSize=18,minPoolSize=5,idleConnectionTestPeriod=30 的情况下,日志PatternLayout %d %-5p: %l – %m%n,一天的日志记录情况大约是12M,在硬盘空间允许的情况下建议按天存储日志。
zhaoshijie
浏览: 1576996 次
来自: 北京
用了泛型DAO,
那就用不了@MapperScan, DAO ...
为毛我这只有一次
感觉BaseDao封装的太厉害了,Mapper名称都规定死了
大神密码分享下呗
在初始化的时候,加载了dao时会报空指针,这是为什么呢,大神}

我要回帖

更多关于 hibernate配置打印sql 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信