【问题标题】:Hibernate app can't connect to MySQL after MySQL rebootMySQL 重新启动后,Hibernate 应用程序无法连接到 MySQL
【发布时间】:2015-05-21 17:46:25
【问题描述】:

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

一旦我启动我的 webapp - 一切正常,但最近我在我的数据库上配置了每日备份,然后开始看到我的 webapp 连接到 mySQL 的问题。

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

一旦我重新启动我的 ec2 vm,一切都会解决(如果我也重新启动 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.

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

【问题讨论】:

    标签: java mysql hibernate amazon-web-services rds


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多