【问题标题】:BoneCP: Is there a way to configure the Statement Timeout for all statements?BoneCP:有没有办法为所有语句配置语句超时?
【发布时间】:2025-12-12 07:45:02
【问题描述】:

我正在使用一个使用 BoneCp 访问 mysql 数据库的播放应用程序(play-java 2.2.1,bonecp 0.8.0.RELEASE),但没有找到为所有语句设置语句超时的方法(conf doc here)。 我发现的只是如何以编程方式执行 ir:

java.sql.Statement.setQueryTimeout(int)

我可能最终会用一个可以设置该值的对象来包装所有创建的语句,但我认为我可以在配置文件中设置它。

我知道我可以使用 spring 或其他框架并设置某种“事务超时”值,但我想避免这种情况。

谢谢!

【问题讨论】:

    标签: java jdbc playframework-2.1 bonecp


    【解决方案1】:

    您可以fork BoneCP 并调整StatementHandle 类以在构造函数中为internalStatement 设置默认语句超时(可能滥用QueryExecuteTimeLimit 配置选项,它已在@987654328 的构造函数中使用@)。

    您也可以使用JPA/Hibernate with Play,它允许您设置default query timeout。是的,这意味着使用框架,但默认语句超时通常不是数据库连接池的一部分。

    请注意,查询/语句超时与事务超时不同。 “事务超时用于将总语句处理时间限制为允许的最大数量”,语句超时是“对语句应该运行多长时间的限制”(复制自 this article 章节“什么是事务超时?”和“什么是语句超时?”)。

    【讨论】:

    • 我认为当您说“默认语句超时通常不是数据库连接池的一部分”时,您有一个观点,因此尽管很诱人,但可能不在正确的路径中添加它框架的功能。可能选项是在我的项目中使用事务超时或解决方法。谢谢!
    最近更新 更多