Java Spring JDBC错误连接

Java Spring JDBC错误连接,java,spring,spring-mvc,tomcat,jdbc,Java,Spring,Spring Mvc,Tomcat,Jdbc,我将Tomcat与Spring结合使用(使用web服务Jersey async),并在Tomcat中设置池连接,如下所示: <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB" password="secret" type="javax.sql.DataSource"

我将Tomcat与Spring结合使用(使用web服务Jersey async),并在Tomcat中设置池连接,如下所示:

<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
    maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB"
    password="secret" type="javax.sql.DataSource"  url="jdbc:mysql://localhost:3306/DB"
    username="root" />
如果我长时间不向tomcat发出请求(需要查询数据库的请求),tomcat会给我一个500错误的响应,但是如果我调用任何请求(不需要查询数据库的请求),所有这些都可以工作

所以问题是Spring的一些配置(我想)…如果我等待很长时间来执行任何请求,为什么Spring不工作


抱歉,我的英语不好

虽然看到错误消息会有所帮助,但听起来你的MySQL服务器正在断开你的池连接

您说过,只有当您让应用程序运行一段时间而不向数据库发送任何请求时,您才会看到这个问题。由于您的应用程序未使用数据库连接,您的MySQL服务器将看到连接在一段时间内未被使用(如果您控制服务器,这是可配置的),并断开连接

因为服务器断开了它们的连接,所以连接池还没有意识到它们已经关闭。这会产生一个问题,因为下次你使用连接时,池会给你的应用程序一个坏连接。虽然我不能确定,因为我没有看到确切的错误消息,但这肯定会导致您得到500个错误

我建议您将testOnBorrow和validationQuery属性添加到连接池配置中(无论如何都应该设置这些属性)。这将指示池在将连接提供给应用程序之前,使用指定的查询测试连接。换句话说,池将过滤掉任何坏的连接,并用新的、好的连接替换它们

<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
    maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB"
    password="secret" type="javax.sql.DataSource"  url="jdbc:mysql://localhost:3306/DB"
    username="root" testOnBorrow="true" validationQuery="SELECT 1" />


Spring抛出的Tomcat日志中是否存在异常?如果我使用Eclipse运行Tomcat,我会在哪里找到Tomcat日志?请尝试在此处查找:我尝试了您的配置,并通知您
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
    maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB"
    password="secret" type="javax.sql.DataSource"  url="jdbc:mysql://localhost:3306/DB"
    username="root" testOnBorrow="true" validationQuery="SELECT 1" />