mysql数据库连接不释放问题

mysql数据库连接不释放问题 


1    数据库连接无法释放原帖内容
1.1    原帖内容
服务封装平台集成jcf框架后数据库连接无法释放。
服务注册->批量数据服务问题描述:
连续加载该功能点后,后台无法执行dao层的服务。
问题原因:
经排查造成该问题的原因是:有个别的ajax调用数据库连接无法释放造成的。在批量数据服务功能点中初始加载方法中会有4个ajax查询服务,其中有一个连接可以释放,其它的服务都不能释放。
解决方法:
1.增加连接数:
xxx-web/resources/application.properties中增加
jcf.datasource.A.initial-size=10
jcf.datasource.A.min-idle=10
jcf.datasource.A.max-active=100
jcf.datasource.A.max-wait=60000
2.查找有哪些服务是可以释放连接,哪些服务是不可以释放的。找出差别。
数据库连接的查看方法:
xxx-web的pom.xml中增加
    com.xxx.ijcf
    ijcf-boot-starter-actuator
xxx-dao的pom.xml中增加
              org.apache.commons
               commons-dbcp2
               2.1.1
xml不能贴上来,请看附件。project_pom.xml
将project-web/resources/application.properties中jcf.datasource.A.type修改为:
jcf.datasource.A.type=org.apache.commons.dbcp2.BasicDataSource
浏览器访问:http://localhost:23000/open/datasource

按照原帖修改后效果:
页面仍旧存在数据库连接无法释放,且页面较之前存在卡顿现象,访问页面时,后台连接数据时间超长。

2    数据库连接释放问题解决 (暂未完全解决,只是延缓)
2.1    恢复dbcp连接方式
在通过程序跟踪代码,project-web-exec.jar 

实际打包后同时存在着两个jar包
project-web-exec.jar\lib\commons-dbcp2-2.1.1.jar
project-web-exec.jar\lib\commons-dbcp-1.4.jar

但底层类com.xxx.dss.hibernate.dao.impl.BaseDao仍旧使用的是 commons-dbcp-1.4.jar包,仍旧使用的org.apache.commons.dbcp.BasicDataSource连接;

/project-web/src/main/resources/application.properties
把连接池信息修改为dbcp连接后,页面上卡顿现象消失,页面访问能够快速响应并返回查询内容;
#jcf.datasource.A.type=org.apache.commons.dbcp2.BasicDataSource
jcf.datasource.A.type=org.apache.commons.dbcp.BasicDataSource

2.2    底层代码升级使用后hibernate5连接类
核对hibernate使用版本为hibernate-core-5.0.12.Final.jar核心包
之前采用框架采用hibernate-core-4.1.8.Final.jar

底层代码相关类由hibernate4升级使用后hibernate5:
org.springframework.orm.hibernate5.SessionFactoryUtils
org.springframework.orm.hibernate5.support.HibernateDaoSupport
org.springframework.orm.hibernate5.HibernateCallback
org.springframework.orm.hibernate5.HibernateTemplate
org.springframework.orm.hibernate5.support.HibernateDaoSupport

2.3    获取连接池session部分代码修改
修改前:
Query query = super.getSessionFactory().getCurrentSession().createSQLQuery(sql);
修改后:
Query query = super.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(sql);

3    数据库连接释放问题解决 (在2.1基础上修改,完全解决)
3.1    修改数据库连接方式(采用HikariCP连接)
资源文件路径:/project-web/src/main/resources/application.properties
jcf.datasource.A.type=com.zaxxer.hikari.HikariDataSource
jcf.datasource.A.default-auto-commit=true
jcf.datasource.A.initial-size=5
jcf.datasource.A.minimum-idle=5
jcf.datasource.A.maximum-pool-size=20
jcf.datasource.A.auto-commit=true
jcf.datasource.A.idle-timeout=30000
jcf.datasource.A.pool-name=DatebookHikariCP
jcf.datasource.A.max-lifetime=1800000
jcf.datasource.A.connection-timeout=30000
jcf.datasource.A.connection-test-query=SELECT 1
3.2    连接池监控
http://127.0.0.1:23000/bdsOpen/datasource

[{"url":"jdbc:mysql://172.21.xx.xx:3307/db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false","username":"user","password":"b***s","type":"com.zaxxer.hikari.HikariDataSource","driverClassName":"com.mysql.jdbc.Driver","defaultAutoCommit":true,"maxWaitMillis":30000,"maxEvictableIdleTimeMillis":30000,"maxConnLifetimeMillis":1800000,"validationQuery":"SELECT 1","minIdle":5,"maxTotal":20,"registerMbeans":false,"allowPoolSuspension":false,"numActive":0,"idleNum":14,"numOfAll":14,"numThreadWait":0}]

活跃连接数[numActive]:在没有查询的情况下,要回归到0,才算正常;
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值