JDBCConnectionException: could not execute query,数据库连接池问题
1、做了个后台编辑系统,上传到服务器后正常使用,但是第二天却出现了如下的问题,
经过查询资料知道了是数据库连接池的问题。
按照网上网友的说法,运行一个系统,测试没有问题,然后把本地时间更改到后天,再次运行就报这个错误了!(首先启动tomcat,打开其中的一个系统,比如students, 运行无误,可以登录系统,把系统时间设置为1天后,再次打开, 就出现了上面图片中的错 误,亲自试一下就是这样子滴,别忘了打开tomcat就OK)。
Hibernate支持如下的连接池:
DriverManagerConnectionProvider:代表由Hibernate提供的默认的数据库连接池
C3P0ConnectionProvider:代表C3P0连接池
ProxoolConnectionProvider:代表Proxool连接池
DBCPConnectionProvider:代表DBCP连接池
DatasourceConnectionProvider:代表在受管理环境中由容器提供的数据源
默认连接池并不支持在分配一个连接时,测试其有效与否的功能,而C3P0、Proxool、DBCP都提供了这样的功能,正好可以解决上述问题,在这里我们使用c3p0来解决。
在hibernate.cfg.xml文件里面加入如下的配置:
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<!--每*秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="c3p0.idleConnectionTestPeriod ">18000</property>
<!--最大空闲时间,*秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="c3p0.maxIdleTime">25000</property>