注解中timeout配置"/>
spring事务注解中timeout配置
要点:
Spring事务超时 = 事务开始 到 最后一个Statement创建之间的时间 + 最后一个Statement的执行的时间(即其queryTimeout)
设置@Transactional(timout = 1)时,希望是当前方法在一个事务中,且事务执行时间应小于1秒中,若超过1秒则应抛出异常:
Transaction timed out: deadline was Mon Jul 05 00:02:18 CST 2021
但这其中有一个坑:
- case1: 抛出Transaction timed out 异常
@Transactional(timeout = 1)public List<ResourceEntity> findAll2() throws InterruptedException {TimeUnit.SECONDS.sleep(2);List<ResourceEntity> resourceEntities = resourceMapper.rangeQueryResources(1, 20);return resourceEntities;}
- case2: 不会抛出 Transaction timed out 异常
@Transactional(timeout = 1)public List<ResourceEntity> findAll3() throws InterruptedException {List<ResourceEntity> resourceEntities = resourceMapper.rangeQueryResources(1, 20);TimeUnit.SECONDS.sleep(2);return resourceEntities;}
case2可能导致代码中的坑,所以在一个事务方法中,在查询数据库之后不要有耗时过高的操作。
具体分析可参考:
Spring事务超时时间可能存在的错误认识
更多推荐
spring事务注解中timeout配置
发布评论