在这里插入图片描述
今天项目报错: No operations allowed after connection closed
错误原因:MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错

解决方案
1.修改项目配置文件 原有的配置:online.applicationContext.xml

<bean id="db" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://"/>
        <property name="username" value=""/>
        <property name="password" value=""/>
        <property name="defaultCatalog" value="toy"/>
        <property name="connectionProperties" value="[useUnicode=false;character_set_client=utf8mb4]"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="50"/>
        <property name="maxIdle" value="50"/>
        <property name="minIdle" value="10"/>
        <property name="maxWait" value="5000"/>
        <!-- 设置自动回收超时连接 -->
        <property name="removeAbandoned" value="true"/>
        <!-- 自动回收超时时间(以秒数为单位) -->
        <property name="removeAbandonedTimeout" value="10"/>
        <!-- 设置在自动回收超时连接的时候打印连接的超时错误 -->
        <property name="logAbandoned" value="true"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="db" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="db" />
    </bean>

    <aop:aspectj-autoproxy />

修改之后

<bean id="db" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://"/>
        <property name="username" value=""/>
        <property name="password" value=""/>
        <property name="defaultCatalog" value=""/>
        <property name="connectionProperties" value="[useUnicode=false;character_set_client=utf8mb4]"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="50"/>
        <property name="maxIdle" value="50"/>
        <property name="minIdle" value="10"/>
        <property name="maxWait" value="5000"/>
        <!-- 设置自动回收超时连接 -->
        <property name="removeAbandoned" value="true"/>
        <!-- 自动回收超时时间(以秒数为单位) -->
        <property name="removeAbandonedTimeout" value="10"/>
        <!-- 设置在自动回收超时连接的时候打印连接的超时错误 -->
        <property name="logAbandoned" value="true"/>
        <property name= "timeBetweenEvictionRunsMillis" value="30000" />
        <property name= "numTestsPerEvictionRun" value="30" />
        <property name="minEvictableIdleTimeMillis" value="1800000" />

方案二
首先执行sql语句:

SHOW VARIABLES LIKE
                               "%timeout%"

结果
在这里插入图片描述

在文件中设置修改

wait_timeout=31536000 
interactive_timeout=31536000 

重启数据库

更多推荐