2013-02-13 171 views
1

我有一个部署在TomCat服务器上的Spring MVC项目,我不断收到有关数据库连接的问题。几个小时后,当用户试图登录,他们将与500错误,此消息得到满足:NamedParameterJdbcTemplate + TomCat,打开和关闭数据库连接

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.RecoverableDataAccessException: The last packet successfully received from the server was 75,026,904 milliseconds ago. The last packet sent successfully to the server was 75,031,521 milliseconds ago. is longer than the server configured value of 'wait_timeout'. 

我相信这个问题是因为Tomcat的认为到MySQL的连接仍然是开放的,但MySQL的关闭连接8小时后。一旦你得到这个错误后刷新页面,一切工作正常。

我的问题是,是否有一种方法可以使用NamedParameterJdbcTemplate查询数据库,每次使用时都打开和关闭连接,而不是维护一个持久连接?还是有更好的方法来解决这个问题?

也许设置autoReconnect = true?我现在正在尝试,但是我需要几个小时才能知道它是否有效。

回答

1

假设您使用的是Tomcat的连接池,您可以将池设置为testOnBorrow =“true”和validationQuery =“SELECT 1 FROM my_test_table”。这样,连接将在线程检出之前进行检查。如果它关闭,另一个将被打开并提供给服务于您的请求的线程。您可以阅读Tomcat here提供的选项的文档。