首页 > 解决方案 > 有没有办法为 Spring 中的 DataSourceTransactionManager 的事务超时设置实时计时器?

问题描述

据我所知,Spring DataSourceTransactionManager 中事务超时的默认行为是它检查事务的开始时间并根据事务 AOP 设置设置事务的限制时间。在这些之后,它会检查当前时间是否超过了事务每次对 DataSource 执行查询时的限制时间,如果是,则 TransactionManager 抛出 TransactionTimedOutException。

由于以上原因,当一个事务服务只有一次查询执行时,我不能依赖事务限制时间。

有没有办法为DataSourceTransactionManager设置一个实时事务定时器,它是基于定时器线程的?

标签: springtimeoutspring-transactions

解决方案


语句/查询级超时(相对于事务级超时)可能对您有用。有很多方法可以设置它们,具体取决于您的设置:

  • 查询javax.persistence.query.timeout提示
  • 休眠的Query.setTimeout()
  • JDBCTemplate.setQueryTimeout()(这也可以全局设置)
  • 使用普通的 JDBC,我们可以设置查询超时StatementPreparedStatement

语句级超时需要驱动程序支持,因此行为可能因实现而异。此外,如果出现网络问题等异常情况,它们也不能保证正常工作(但您通常也可以设置网络级超时。)


推荐阅读