Spring中DataSourceTransactionManager的事务超时有没有设置实时定时器的方法?

Is there a way of setting a real-time timer for for the transaction timeout of DataSourceTransactionManager in Spring?

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

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

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

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

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

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