spring事务传播级别
- required经常错的,需要原子性的,如果上下文没有事务就不理会了,只顾着自己,是最简单的的事务,如字面意思。如果上下文有事务就共享一个事务,可以采用Required。默认的。
- supported不经常错的,同时不需要事务的可以使用supported。(少有的场景,建议采用not_supported代替,就是挂起上下文,以免影响性能。)
- mandatory希望原子性,并且发现上下文先前没有事务会有异常告警。是一个很敏感的mandatory,完美主义者使用。
- required_new特点和required一样要求必须有事务,如果上下文有事务不会共用,会挂起,相当于起了两个独立的事务。
- not_supported如果上下文有事务就挂起上下文,没有就按事务执行,是有礼貌的高性能的无事务方法。
- never是个粗暴的不需要事务的方法。
- nested会创建两个事务,上下文事务的回滚会使子事务回滚一起,他和required_new不一样的特点,但是和required不同的是它回滚不会影响上下文事务,因为它和上下文不共享事务。
事务传播过程只有一个事务:required,mandatory,supported,not_supported
事务传播过程中涉及两个事务关系:required_new,nested
不需要事务:never
会爆异常:mandatory,never
会挂起上一个事务: required_new, not_supported
会回滚上一个事务:required,mandatory,supported,
有两个事务且会回滚子事务: nested.
有一个事务且会回滚子方法:supported,required,mandatory