【问题标题】:Hibernate timeout when saving保存时休眠超时
【发布时间】:2018-11-05 23:37:14
【问题描述】:

我有一个使用 MySql 保存到表中的应用程序(该表有 2 个 JSON 字段,其中一个可以接收大输入)。在生产中时不时地出现以下错误:

SqlExceptionHelper - 从服务器成功接收的最后一个数据包是 71,290,382 毫秒前。
最后一个成功发送到服务器的数据包是在 71,290,384 毫秒前。比服务器长 'wait_timeout' 的配置值。您应该考虑过期和/或测试连接有效性 在您的应用程序中使用之前,增加客户端超时的服务器配置值,或使用连接器/J 连接属性 'autoReconnect=true' 来避免这个问题。

我不明白为什么会发生这种情况,因为在本地我从未遇到过这个问题。这是我目前的配置:

cfg.setProperty("hibernate.c3p0.min_size", "5")
                .setProperty("hibernate.c3p0.max_size", "20")
                .setProperty("hibernate.c3p0.timeout", "30000")
                .setProperty("hibernate.c3p0.max_statements", "50")
                .setProperty("hibernate.c3p0.idle_test_period", "3000")
                .setProperty("hibernate.connection.autoReconnect", "true")
                .setProperty("hibernate.connection.autoReconnectForPools", "true");

我错过了什么吗?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    不久前我们遇到了同样的问题。我在历史中搜索,虽然你可以保留你拥有的值,但你需要添加这个:<property name="connection.is-connection-validation-required">true</property>。这对我们的工件起到了作用,但您需要检查您的情况,因为您可能还有一些其他设置。

    作为旁注,我认为应该是:

    .setProperty("connection.autoReconnect", "true")
    .setProperty("connection.autoReconnectForPools", "true");
    

    我们还有一个c3p0.properties 文件:

    c3p0.preferredTestQuery=select 1 from dual
    c3p0.maxConnectionAge=3600
    c3p0.testConnectionOnCheckin=false
    c3p0.testConnectionOnCheckout=true
    c3p0.acquireRetryDelay=1500
    c3p0.acquireRetryAttempts=15
    c3p0.breakAfterAcquireFailure=false
    c3p0.idleConnectionTestPeriod=200
    

    特别注意testConnectionOnCheckout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2012-05-28
      相关资源
      最近更新 更多