MySQL 重启后休眠应用程序无法连接到 MySQL

Hibernate app can't connect to MySQL after MySQL reboot

我有一个网络应用程序 运行 在 tomcat 上的亚马逊 ec2 上,休眠和休息,我的 mySQL 是通过亚马逊 rds 的独立实例。

一旦我启动我的网络应用程序 - 一切正常,但最近我在我的数据库上配置了每日备份,然后开始看到我的网络应用程序连接到 mySQL 时出现问题。

基本上只有在 mysql 实例重新启动(备份)之前启动我的 webapp 时才会出现问题。然后在 mySQL 出于某种原因重新启动后,从我的 webapp 到它的任何连接都失败了。

一旦我重新启动我的 ec2 虚拟机,一切都会解决(如果我也重新启动 tomcat,它可能会解决,但我还没有尝试过)

如何确保我的 webapp 在 mysql 重启后连接回 mysql?

这是我写入日志的内容:

21-May-2015 11:42:27.857 WARN [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions SQL Error: 0, SQLState: 08S01
21-May-2015 11:42:27.857 ERROR [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions Communications link failure
The last packet successfully received from the server was 200,187 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.

对挖掘什么有什么建议吗?

您应该使用连接池。对于 Hibernate,您可以使用 c3p0。 在您的休眠属性中设置以下内容

hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider

然后,在 c3p0.properties 文件中,设置这些属性以在数据库关闭时每 3 秒无限期地重试重新连接:

c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false

有关如何从数据库中断中恢复的更多详细信息,请参阅this section