如果池中的连接在Spring中闲置超过一段时间,MySql是否有任何超时功能?

时间:2015-11-18 16:34:58

标签: mysql spring hibernate tomcat jdbc

我在tomcat服务器上有一个应用程序,它建立在spring framework + Hibernate上,但是当应用程序,服务器空闲7天后,如果我尝试访问应用程序,我会收到以下错误

  

org.hibernate.exception.JDBCConnectionException:无法执行查询

但是mysql正在设备上运行,其中tomcat服务器正在运行我已经检查了所以我重新启动了tomcat服务器然后应用程序运行良好我没有收到任何错误

运行

的应用程序的database.xml文件
<bean id="dataSource" 
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="${jdbc.url}"/>
   <property name="username" value="${jdbc.username}"/>
   <property name="password" value="${jdbc.password}"/>
</bean>

</beans>

我无法重新启动服务器,因为我想访问该应用程序是否有任何永久解决方案?

1 个答案:

答案 0 :(得分:2)

您实际上没有连接池(您需要)。您正在编写单个连接的硬编码。因此,一旦它闲置太长时间,一个连接就会消失。

您需要使用数据库连接池。你正在使用Tomcat,你可能会考虑使用它的内置选项

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

<Resource name="jdbc/cciDataSource" 
    auth="Container" 
    type="javax.sql.DataSource"
    username="userAcctName"
    password="somePassword"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://someDatabaseHost/databaseName"
    maxActive="15"
    maxIdle="7" 
    validationQuery="select now()"
    maxWait="1000"
    removeAbandoned="true"
    removeAbandonedTimeout="15"
    testOnBorrow="true"
    logAbandoned="true" />