本文借鉴了网上的不少博客,在此再也不声明mysql
1.增长 MySQL 的 wait_timeout 属性的值(不推荐)linux
mysql5以前的版本,能够在jdbc链接的url中加入:autoReconnect = truesql
设置mysql5中wait_timeout
在linux中最大为365,wait_timeout=31536000
在window中最大为24天,以window为例: 数据库
这个方法并不推荐,缘由:服务器
MySQL服务器所支撑的最大链接数是有限的,由于每个链接、第一个表打开的操做都要消耗服务器内存,理想状态是当一个MySQL客户端链接完成工做就自动断开释放内存,若是你的你的网站有大量的MySQL连接请求,这些链接完成SQL执行任务后空闲着啥事也不干,白白占用内存资源,若是 这些链接堆积起来,将致使MySQL超过最大链接数,从而没法新建MySQL链接,有可能致使“Too many connections”的错误。
参考自:http://blog.csdn.net/cenfei78325747/article/details/7854611session
2.使用链接池(推荐)ide
(1)不管是使用C3PO仍是proxool链接池,必定要去hibernate解压包里找到相应文件夹的jar包,导入: 测试
有些人一直解决不了链接池问题,可能缘由就在这里
以proxool为例:
(2)配置hibernate.cfg.xml网站
<session-factory>
<!-- 选择使用链接池 -->
<property name="connection.provider_class">
org.hibernate.connection.ProxoolConnectionProvider
</property>
<!-- 指明要使用的proxool.xml中定义的proxool别名 -->
<property name="proxool.pool_alias">mysql</property>
<!-- 指明Proxool配置文件所在位置,这里与Hibernate的配置文件在同一目录下 -->
<property name="proxool.xml">proxool.xml</property>
..............
</session-factory>
(3)在同一目录下配置proxool.xmlurl
<?xml version="1.0" encoding="UTF-8"?>
<proxool>
<!-- proxool别名 -->
<alias>mysql</alias>
<!-- 数据库链接Url -->
<driver-url>
<![CDATA[jdbc:mysql://localhost:3306/work?useUnicode=true&characterEncoding=UTF-8]]>
</driver-url>
<!-- JDBC驱动名称 -->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<!-- 数据库链接账号 -->
<driver-properties>
<!--这里改为你本身的-->
<property name="user" value="root" />
<property name="password" value="password" />
</driver-properties>
<!-- proxool自动侦察各个链接状态的时间间隔(毫秒),侦察到空闲的链接就立刻回收,超时的销毁 -->
<house-keeping-sleep-time>60000</house-keeping-sleep-time>
<!-- 指因未有空闲链接能够分配而在队列中等候的最大请求数,超过这个请求数的用户链接就不会被接受 -->
<maximum-new-connections>100</maximum-new-connections>
<!-- 最少保持的空闲链接数 -->
<prototype-count>3</prototype-count>
<!-- 容许最大链接数,超过了这个链接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new- connections决定 -->
<maximum-connection-count>20</maximum-connection-count>
<!-- 最小链接数 -->
<minimum-connection-count>3</minimum-connection-count>
<!-- 在分配链接先后是否进行有效性测试,这个是解决本问题的关键 -->
<test-before-use>true</test-before-use>
<test-after-use>true</test-after-use>
<!-- 用于测试的SQL语句 -->
<house-keeping-test-sql>SELECT CURRENT_USER</house-keeping-test-sql>
</proxool>
</something-else-entirely>