java - MySQL 重启后 Hibernate 应用程序无法连接到 MySQL

标签 java mysql hibernate amazon-web-services rds

我有一个在 tomcat 上的 amazon ec2 上运行的 webapp hibernate 和休息,我的 mySQL 是通过 amazon rds 的独立实例。

一旦我启动我的 web 应用程序 - 一切正常,但最近我在我的数据库上配置了每日备份,然后开始看到我的 web 应用程序连接到 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 属性中设置以下内容

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

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

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

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

关于java - MySQL 重启后 Hibernate 应用程序无法连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380878/

相关文章:

java - 具有急切加载问题的 Hibernate 多对多

java - Maven 找不到 persistence.xml

java - 需要提示用户输入整数,直到输入二进制数

java - 使用BlockingQueue在Java中实现生产者-消费者似乎在消费后丢失数据

php - 连接到数据库

mysql - 我的 MySQL AWS RDS 实例中的这些意外数据库是什么?

Java:将 XML 导入数据库,最简单的方法是什么?

java - 在 'inner' 方法中抛出异常后如何停止 java 方法的执行?

java - 重命名未反射(reflect)在 JSON 输出中的类变量

mysql - 两次之间的差异存储为文本