猿问

一段时间不访问错误500,刷新一下就好了。

碰到一个奇怪的问题,不知道怎么处理,求指教。。


一个小的javaWeb项目放在阿里云的linux服务器上,数据库用的是mysql,web采用的是springmvc+mybatis,dbcp连接池。现在问题是一段时间不访问,再突然访问就会错误500,然后刷新一下页面就好了,也不会报错误信息。怀疑是不是连接休眠啥的。


这是关于连接池的配置:


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  

        destroy-method="close">  

        <property name="driverClassName" value="${driver}" />  

        <property name="url" value="${url}" />  

        <property name="username" value="${username}" />  

        <property name="password" value="${password}" />  

        <!-- 初始化连接大小 -->  

        <property name="initialSize" value="0"></property>  

        <!-- 连接池最大数量 -->  

        <property name="maxActive" value="20"></property>  

        <!-- 连接池最大空闲 -->  

        <property name="maxIdle" value="20"></property>  

        <!-- 连接池最小空闲 -->  

        <property name="minIdle" value="1"></property>  

        <!-- 获取连接最大等待时间 -->  

        <property name="maxWait" value="60000"></property>  

    </bean> 

看到错误日志了:

the fallback translator

2016-09-22 21:11:44,498 [http-bio-80-exec-10] DEBUG [org.mybatis.spring.SqlSessionUtils] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b370e4f]

2016-09-22 21:11:44,498 [http-bio-80-exec-10] DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource

2016-09-22 21:11:44,499 [http-bio-80-exec-10] DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Could not close JDBC Connection

java.sql.SQLException: Already closed.

    at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:114)

    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191)

    at org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341)

    at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:328)

    at org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)


千巷猫影
浏览 1008回答 3
3回答

largeQ

除了楼上的设置之外,你可以设置每隔多少秒去数据库select 1一下,用来保持这个链接的生存

智慧大石

这个是因为你连接池中配置的连接等待时间过长,mysql已经认为连接过期了。解决办法如下1、修改my.cnf延长连接超时时间[mysqld]wait_timeout=31536000&nbsp;interactive_timeout=315360002、在连接URL上添加参数autoReconnect=true&failOverReadOnly=false

慕虎7371278

spring.datasource.adanos.initialSize=1spring.datasource.adanos.minIdle=1spring.datasource.adanos.maxActive=30spring.datasource.adanos.maxWait=60000spring.datasource.adanos.timeBetweenEvictionRunsMillis=60000spring.datasource.adanos.minEvictableIdleTimeMillis=300000spring.datasource.adanos.validationQuery=select xspring.datasource.adanos.testWhileIdle=truespring.datasource.adanos.testOnBorrow=falsespring.datasource.adanos.testOnReturn=falsespring.datasource.adanos.poolPreparedStatements=truespring.datasource.adanos.maxPoolPreparedStatementPerConnectionSize=10spring.datasource.adanos.filters=stat
随时随地看视频慕课网APP

相关分类

Java
我要回答