java.sql.SQLException: Already closed.
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${jdbc.validationQuery}" />
<property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
<property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
<property name="testOnReturn" value="${jdbc.testOnReturn}" />
##毫秒秒检查一次连接池中空闲的连接 jdbc.timeBetweenEvictionRunsMillis=60000 ##连接保持空闲而不被驱逐的最长时间。 jdbc.minEvictableIdleTimeMillis=300000 jdbc.validationQuery=SELECT 'x' jdbc.testWhileIdle=true jdbc.testOnBorrow=false jdbc.testOnReturn=false
解决办法:为数据库配置文件设置以上参数。
1:testOnBorrow表示从连接池中获取连接前是否运行。
2:validationQuery,true=运行[默认],false=不运行testOnBorrow在不设置的时候默认为false,设置为false就是默认不检测连接池是否连接可用,当连接池中的连接被数据库关闭的情况下,就会报这个错,连接被关闭。如果单纯的设为true,也不好,每次运行都要进行检查,影响效率。
3:testWhileIdle =false 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.用这个参数就可以判断什么时候检测连接池是否可用。