与MySql的连接正在自动中止。 如何正确configurationConnector / J?

我从错误信息中读到这个build议:

在应用程序中使用之前,应考虑使用过期和/或testing连接有效性,增加服务器configuration的客户端超时值,或者使用Connector / J连接属性“autoReconnect = true”来避免此问题。

我使用Spring和JPA。 我应该在哪里configurationConnector / J? (在persistence.xml ,或在entityManagerFactory弹簧configuration,或在dateSource弹簧configuration,或其他地方?)

本文介绍了三种解决scheme来防止连接中止:

  1. 使用autoReconnect=trueconfiguration连接string。 这是URL连接string的一个属性,它在驱动程序级别工作。 您需要更改数据源configuration中的连接string。

     url="jdbc:mysql://localhost:3306/confluence?autoReconnect=true" 
  2. 增加超时。 这通常是数据库的一个属性。 你可以增加这个值,看看你的连接是否中断。

  3. configuration连接池以testing连接validation。 这是在游泳池完成的,而不是驾驶员的水平。 这将取决于您使用的数据源实施。 但是如果你使用了一个池,例如c3p0 ,它应该可以在数据源的属性中进行configuration。

附加评论:

  • 数据源/池也可以有一个超时,这对应于空闲连接保留在池中的时间。 不要与数据库超时混淆。
  • 有几种方法来testing连接的有效性。 一种常见的方法是制作虚拟testing表。 池将在虚拟testing表上发出一个select,以查看连接是否仍然正常。

不build议使用AutoReconnect 。 从MySQL 这里

司机是否应该尝试重新build立陈旧和/或死亡的连接? 如果启用,则驱动程序将针对属于当前事务的陈旧或死链接发出的查询抛出exception,但会在新事务中的连接上发出的下一个查询之前尝试重新连接。 不build议使用此function,因为它在应用程序不能正确处理SQLExceptions时会产生与会话状态和数据一致性相关的副作用,并且只能在您无法configuration应用程序以处理由SQLException导致的SQLException时使用死了和陈旧的连接。 或者,作为最后一个选项,研究将MySQL服务器variables“wait_timeout”设置为较高的值,而不是默认的8小时。

这是像我这样的人通过search引擎find这个旧post。

其他答案是更好的长期解决scheme。 但是,如果你只是需要马上restart运行mysql连接,你可以shutdown然后restart tomcat ,一切都会正常工作。 这使您能够避免系统停机,同时找出更长期的解决scheme。

terminal导航到$CATALINA_HOME ,然后inputshutdown.sh ,然后inputstartup.sh 。 等待启动顺序完成,然后您的应用程序将再次工作一段时间。