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 我们可以在
Statement
和 PreparedStatement
上设置查询超时
语句级超时需要驱动程序支持,因此行为可能因实现而异。此外,如果出现网络问题等异常情况,它们也不能保证正常工作(但您通常也可以设置网络级超时。)
据我所知,Spring DataSourceTransactionManager 中事务超时的默认行为是检查事务的开始时间并根据事务 AOP 设置设置事务的限制时间。之后,每次事务对DataSource执行查询时,都会检查当前时间是否超过限制时间,如果是,则TransactionManager抛出TransactionTimedOutException。
由于上述原因,当事务服务只有一个查询执行时,我不能依赖于事务限制时间。
有没有办法为基于定时器线程的DataSourceTransactionManager设置实时事务定时器?
语句/查询级超时(相对于事务级超时)可能适合您。有很多方法可以设置它们,具体取决于您的设置:
javax.persistence.query.timeout
查询提示- Hibernate 的
Query.setTimeout()
JDBCTemplate.setQueryTimeout()
(这个也可以全局设置)- 使用普通 JDBC 我们可以在
Statement
和PreparedStatement
上设置查询超时
语句级超时需要驱动程序支持,因此行为可能因实现而异。此外,如果出现网络问题等异常情况,它们也不能保证正常工作(但您通常也可以设置网络级超时。)