【问题标题】:How to check connection in hibernate如何在休眠中检查连接
【发布时间】:2014-11-11 00:20:50
【问题描述】:

我是使用休眠连接的新手,在执行查询之前检查连接有困难。目前,如果我执行查询,我的 java swing 应用程序会在确认连接不可用之前挂起大约 30 秒。我已经使用了 session.isConnected() 但即使服务器关闭,返回总是正确的。请帮忙。谢谢

这是我的连接属性:

"hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider" 
"hibernate.c3p0.validate", "true" 
"hibernate.c3p0.acquire_increment", "2" 
"hibernate.c3p0.idle_test_period", "30" 
"hibernate.c3p0.min_size", "5" 
"hibernate.c3p0.max_size", "25" 
"hibernate.c3p0.max_statements", "0" 
"hibernate.c3p0.testConnectionOnCheckout", "true" 
"hibernate.c3p0.testConnectionOnCheckIn", "true" 
"hibernate.c3p0.preferredTestQuery", "SELECT 1" 
"hibernate.c3p0.acquireRetryAttempts", "3" 
"hibernate.c3p0.acquireRetryDelay", "200" 
"hibernate.c3p0.timeout", "1000" 
"hibernate.c3p0.maxConnectionAge", "1100" 
"hibernate.connection.autoReconnect", "true" 
"javax.persistence.lock.timeout", "1" 
"javax.persistence.query.timeout", "1" 

【问题讨论】:

    标签: mysql hibernate hibernate-entitymanager


    【解决方案1】:

    您使用的是连接池吗?如果是这样,您通常可以使用validationQuery(例如“SELECT 1”)对其进行配置,它将在将连接分发给您之前执行。无需自己手动完成。

    您还没有使用连接池吗?使用一个!

    回答您的评论:您可能需要明确启用验证。例如。将hibernate.c3p0.validate 设置为true

    【讨论】:

    • 嗨,我正在使用 c3p0。我的连接属性是“hibernate.c3p0.preferredTestQuery”,“SELECT 1”。
    • 您好,这包含在我的连接属性中。我认为我的 entitymanager 认为连接仍然有效,即使服务器已经离线。
    • 你能监控实际执行的查询吗?还有一些 max-age 设置可能会影响这些查询的频率。或者,如果预计所有查询都将在很短的时间内返回,您可以设置更短的超时时间。此外,既然我们已经到了那么远,如果您将完整的连接池配置添加到问题中可能会很好。也许其他人发现设置存在明显问题,否则我们必须对其进行迭代才能找到它。
    • 这是我的连接设置:
    • markdown 很好地隐藏了它们(我假设您粘贴了 xml)。请编辑您的问题并在此处提供信息。在问题编辑器中,您将拥有格式化选项,帮助您确保您的 xml 不会被过滤(例如,将其格式化为代码)
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多