spring - 有没有办法为 Spring 中的 DataSourceTransactionManager 的事务超时设置实时计时器?
问题描述
据我所知,Spring DataSourceTransactionManager 中事务超时的默认行为是它检查事务的开始时间并根据事务 AOP 设置设置事务的限制时间。在这些之后,它会检查当前时间是否超过了事务每次对 DataSource 执行查询时的限制时间,如果是,则 TransactionManager 抛出 TransactionTimedOutException。
由于以上原因,当一个事务服务只有一次查询执行时,我不能依赖事务限制时间。
有没有办法为DataSourceTransactionManager设置一个实时事务定时器,它是基于定时器线程的?
解决方案
语句/查询级超时(相对于事务级超时)可能对您有用。有很多方法可以设置它们,具体取决于您的设置:
- 查询
javax.persistence.query.timeout
提示 - 休眠的
Query.setTimeout()
JDBCTemplate.setQueryTimeout()
(这也可以全局设置)- 使用普通的 JDBC,我们可以设置查询超时
Statement
和PreparedStatement
语句级超时需要驱动程序支持,因此行为可能因实现而异。此外,如果出现网络问题等异常情况,它们也不能保证正常工作(但您通常也可以设置网络级超时。)
推荐阅读
- java - 污染源 JAVA
- regex - Mac OS 使用 sed 将多行替换为一个字符
- android - 如何在 Flutter 上获取其他应用的通知数据?
- amazon-ecs - AWS Ecs 任务运行错误 无法运行任务 在您的集群中找不到容器实例
- cmake - 如何使用 g++ 和 CMake 启用整个程序优化
- python - Login trouble with Selenium
- python - Why are my radio buttons in Tkinter not returning values?
- selenium - 当前目录下不存在chromedriver.exe文件
- java - 即使遵循 firebase 代码示例,我也没有在我的 firebase 数据库中获得图像链接
- wpf - 启动时简单的 WPF 应用程序启动画面“跳跃”