Spring c3p0连接池无法释放解决方案
通过c3p0配置连接池的时候,在进行压力测试的时候,日志出现了这样一个错误:Data source rejected establishment of connection, message from server: “Too many connections”
数据库的连接过多。
然后查看mysql的最大连接数,为100。
于是便更改最大连接池。
由于MySQL默认的最大连接数为100,MySQL允许的最大连接数16384。Windows下由于线程数限制MySQL最大连接数为2048。
于是更改为2000。但是数据库连接池最大只有这多,如果建立连接数过多,依旧会超载。
所以要从根本上解决,那么就要释放连接池。
参考博客:http://blog.csdn.net/yonglelaoren/article/details/28886593
解决办法:
将getSessionFactory().OpenSession()更改为getSessionFactory().getCurrentSession()。
getSessionFactory().OpenSession() 这种方法从spring管理的sessionFactory中创建一个session,此session不是线程绑定的。当执行完一个实务的时候自动关闭session.这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率。而且通过这种方式打开的session不会自动关闭,现象时查询多次之后连接池满了,不会再继续查询了。
getSessionFactory().getCurrentSession()方法从spring管理的sessionFactory中创建一个绑定线程的session.spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能。
还有一种原因可能是每次查询都会初始化连接数:<property name="initialPoolSize" value="3" />
。导致查询多次就会造成too many connects错误。因此删除掉,应该在c3p0的文件配置里面配置。
通过更改session方法后,又出现这种错误:No Hibernate Session bound to thread 。
解决办法:
感觉是事务的问题,检查了下Spring配置,的确配置了事务,但是为什么会报这个错呢。于是便在网上找到方法,在dao层加上@Transactional ,于是问题就解决了。
参考:http://www.cnblogs.com/hanxirensheng/archive/2012/03/28/2422433.html 。
还有可能的原因是没有在service没有在 spring管理而报的错。添加这句:<tx:annotation-driven transactionmanager="transactionManager"/>
Spring c3p0连接池无法释放解决方案的更多相关文章
- Spring c3p0连接池配置
数据库连接池 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接 ...
- Spring c3p0连接池通过Hibernate配置
首先进行Hibernate配置,详见http://www.cnblogs.com/claricre/p/6509931.html 然后调用这三个包. 配置hibernate.cfg.xml文件: &l ...
- C3P0连接池在hibernate和spring中的配置
首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...
- spring c3p0数据库连接池连接配置
c3p0连接池配置 xml文件内容如下: C3P0 通过这些属性,可以对数据源进行各种有效的控制 lc_biz_datasource_c3p0.properties 配置: lc_biz_dataso ...
- Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用
Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单 ...
- Spring框架中 配置c3p0连接池 完成对数据库的访问
开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...
- Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate
连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...
- Spring之c3p0连接池配置和使用
1.导入包:c3p0和mchange包 2.代码实现方式: package helloworld.pools; import com.mchange.v2.c3p0.ComboPooledDataSo ...
- Spring框架中 配置c3p0连接池
开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...
随机推荐
- 【Ubuntu Desktop】安装主流桌面
ubuntu的桌面环境实在多,在这里选了几款主流的桌面环境,大家可以按需安装使用. 1.GNOME 2 Classic 经典老界面 gnome2 after reboot,choose GNOME ...
- Ubuntu 安装和使用 Supervisor(进程管理)
服务器版本 Ubuntu 16.04 LTS. Supervisor 是一个用 Python 写的进程管理工具,可以很方便的对进程进行启动.停止.重启等操作. 安装命令: $ apt-get inst ...
- Linux入门练习
1.echo是用于终端打印的基本命令: 1.1echo默认将一个换行符追加到输出文本的尾部. 1.2 echo中转义换行符 如需使用转义序列,则采用echo -e "包含转义序列的字符串&q ...
- Socket套接字
socket编程,熟悉吧,那到底什么是socket呢?: 我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,来供应用 ...
- clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
- epoll全面讲解:从实现到应用
多路复用的适用场合 • 当客户处理多个描述符时(例如同时处理交互式输入和网络套接口),必须使用I/O复用. • 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用 ...
- RESTful学习记录
1.1 什么是RESTful RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful(即Representat ...
- 安卓两个build.gradle的区别
作为安卓入门选手,在导入第三方的时候才发现居然有两个build.gradle,我说咋不对啊,原来是导错了(可能是因为我没有看安卓培训的视频吧). 那么就说一下这两个的作用(一个Project的,一个M ...
- JTemplates 的使用
注意事项:一定要放在Jquery的页面加载完成事件内 : $(function{}); <script src="~/Js/jquery-2.1.0.js">< ...
- 201521123036 《Java程序设计》第8周学习总结
本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 HashMap自定义排序 List<Map.Entry<Stri ...