spring + hibernate + c3p0 数据库连接用完问题排查
2013-02-20 09:17
567 查看
项目中操作数据库一般会用连接池以c3p0为例, hibernate事务管理一般交spring并使用aop实现如下:
这样spring就给我们管理com.xxx.api.impl包下所有公共方法的事务
但是这样配置的时候我们可能会忘记或漏掉一些需要配置事务的方法,比如 :com.yyy.api.impl包下所有类方法都有操作数据库 如果没有配置
的话 当调用此包下方法的时候数据库连接很快就会消耗完了
问题排查方法
1. 给所有操作数据库的方法加上log
2.c3p0的log级别设置为debug
这样log里会看到像这样的信息:
如果poolsize超过了我们设置的最大连接数(maxPoolSize),查看第一次出现这此信息的前面调用了哪些方法,再一一校对是不是方法上没有加事务控制
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"> </property> </bean> <tx:advice id="transaction" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <bean id="logger" class="com.yj.tr.gds.log.MethodLogger"></bean> <aop:config> <!-- pointcuts --> <aop:pointcut id="api" expression="execution(public * com.xxx.api.impl.*.*(..))" /> <!-- transaction advisors --> <aop:advisor advice-ref="transaction" pointcut-ref="api" /> </aop:config>
这样spring就给我们管理com.xxx.api.impl包下所有公共方法的事务
但是这样配置的时候我们可能会忘记或漏掉一些需要配置事务的方法,比如 :com.yyy.api.impl包下所有类方法都有操作数据库 如果没有配置
<aop:pointcut id="api" expression="execution(public * com.yyy.api.impl.*.*(..))" /> <!-- transaction advisors --> <aop:advisor advice-ref="transaction" pointcut-ref="api2" />
的话 当调用此包下方法的时候数据库连接很快就会消耗完了
问题排查方法
1. 给所有操作数据库的方法加上log
2.c3p0的log级别设置为debug
这样log里会看到像这样的信息:
incremented pending_acquires: 1 --[DEBUG] 2013-02-19 00:03:07 about to close PreparedStatement (open PreparedStatements: 1, globally: 1) --[DEBUG] 2013-02-19 00:03:07 acquire test -- pool size: 91; target_pool_size: 92; desired target? 92 --[DEBUG] 2013-02-19 00:03:07 incremented pending_acquires: 2 --[DEBUG] 2013-02-19 00:03:07
如果poolsize超过了我们设置的最大连接数(maxPoolSize),查看第一次出现这此信息的前面调用了哪些方法,再一一校对是不是方法上没有加事务控制
相关文章推荐
- hibernate和spring整合时出现的数据库连接问题
- Spring 的 HibernateDaoSupport 类的 getSession() 导致的连接泄露问题
- spring 集成hibernate 连接多数据库 java BaseDao 实现
- Spring使用C3P0,从db.properties文件中读取信息,连接数据库
- 采用C3P0连接池解决spring+hibernate+mysql 访问空闲8小时后自动断开连接的问题
- 【转载】struts+spring+hibernate无法插入数据库数据的问题
- spring管理用hibernate连接informix 数据库
- 使用spring boot连接数据库出现no profiles are currently active的问题
- hibernate 配置连接oracle 11g数据库时Dialect的选择问题求教
- hibernate不支持数据库断开后重新连接问题
- springmvc+hibernate+workbench网站访问数据库中文无法显示问题
- 使用hibernate数据库连接不释放的问题
- 解决:hibernate查询过多时与数据库连接断开或无法再查询到数据问题。
- Spring 的 HibernateDaoSupport 类的 getSession() 导致的连接泄露问题
- java三大框架之spring配置template连接数据库中文乱码问题
- hibernate连接数据库乱码问题
- Spring 标签引入和数据库连接问题
- 应用Spring和Hibernate(C3P0数据池)写数据库交互项目
- hibernate 利用c3p0连接mysql 数据库 can't open session
- 关于hibernate 利用c3p0连接mysql 数据库