itachy 发表于 2019-9-29 19:14

Spring 事务 如何检测到事务超时后立即返回

遇到场景,如果一个事务超时设定为10s, 事务内部有多条sql相关操作,在执行到某条SQL时,几乎就要超时了,剩余时间是肯定无法执行完该SQL语句,如何在执行当前这条SQL的过程中检测到超时就立即返回【结束事务执行】,从而真正做到按照设定事务超时时间【10s】结束该事务?

萌萌哒的小白 发表于 2019-9-29 19:28

@Transactional (timeout=30) ?

itachy 发表于 2019-9-29 19:45

萌萌哒的小白 发表于 2019-9-29 19:28
@Transactional (timeout=30) ?

这种方式你可以试试   肯定是不行的    如果你在事物内部开始的地方sleep(60s)   那这个事务几乎就是60s之后才能rollback

itachy 发表于 2019-9-29 19:48

萌萌哒的小白 发表于 2019-9-29 19:28
@Transactional (timeout=30) ?

还有哈   如果一个事务内就一条SQL,假设这个SQL的执行时间是60s, 你设置的30s超时,那么到30s的时候,不会立即rollback结束事物的,他会等到这条SQL执行完吧   

萌萌哒的小白 发表于 2019-9-29 20:27

itachy 发表于 2019-9-29 19:48
还有哈   如果一个事务内就一条SQL,假设这个SQL的执行时间是60s, 你设置的30s超时,那么到30s的时候,不 ...

确实是这样,以前没注意到这,学习了.

ding2wife 发表于 2019-9-29 20:29

学习学习

萌萌哒的小白 发表于 2019-9-29 20:40

本帖最后由 萌萌哒的小白 于 2019-9-29 20:56 编辑

itachy 发表于 2019-9-29 19:48
还有哈   如果一个事务内就一条SQL,假设这个SQL的执行时间是60s, 你设置的30s超时,那么到30s的时候,不 ...
你用的是JPA还是mybatis?用的哪个事务管理器?

ydh10120208 发表于 2019-9-29 21:12

事物超时时间只会累积你sql执行的时间,至于程序睡眠时间是不会累积的。

itachy 发表于 2019-9-30 09:56

萌萌哒的小白 发表于 2019-9-29 20:40
你用的是JPA还是mybatis?用的哪个事务管理器?

持久层mybatis   事务是Spring管理的   

itachy 发表于 2019-9-30 09:57

ydh10120208 发表于 2019-9-29 21:12
事物超时时间只会累积你sql执行的时间,至于程序睡眠时间是不会累积的。

你可以试试      兄嘚         
sleep放在执行的SQL前后   试试      
页: [1] 2
查看完整版本: Spring 事务 如何检测到事务超时后立即返回