纸上得来终觉浅,绝知此事要躬行
这次的主角是 @Transactional(propagation= Propagation.REQUIRES_NEW);它总是自己创建事务,给人一种另起炉灶,自力更生的感觉
1、InsertUser 加上requires_new,InsertCuser 不加事务
InsertUser 将事务传播给InsertCuser ,两者使用同一事务
2、InsertUser 不加事务,InsertCuser 加上requires_new
InsertUser 以非事务状态执行,InsertCuser 创建事务
3、InsertUser加上requires_new,InsertCuser 加上requires_new
两者各自创建了事务,相互隔离。互不影响
4、InsertUser加上requires_new,InsertCuser 加上not_supported
InsertUser创建了事务,InsertCuser 以非事务的方式执行
5、InsertUser加上not_supported,InsertCuser 加上requires_new
InsertUser 以非事务的方式执行,InsertCuser 创建了事务
6、InsertUser加上requires_new,InsertCuser 加上never
InsertUser创建事务,InsertCuser 遇到事务报异常
org.springframework.transaction.IllegalTransactionStateException: Existing transaction found for transaction marked with propagation 'never'
7、InsertUser加上never ,InsertCuser 加上requires_new
InsertUser非事务方式执行,InsertCuser 创建事务
8、InsertUser加上requires_new,InsertCuser 加上nested
InsertUser 将事务传播给InsertCuser ,两者使用同一事务
9、InsertUser加上nested ,InsertCuser 加上requires_new
两者各自创建了事务,相互隔离。互不影响
大总结
实验 | InsertUser 调用者
|
InsertCuser 被调用者
|
结果 |
---|---|---|---|
1 | requires_new | 不加 | InsertUser 将事务传播给InsertCuser ,两者使用同一事务 |
2 | 不加 | requires_new | InsertUser 以非事务状态执行,InsertCuser 创建事务 |
3 | requires_new | requires_new | 两者各自创建了事务,相互隔离。互不影响 |
4 | requires_new | not_supported | InsertUser创建了事务,InsertCuser 以非事务的方式执行 |
5 | not_supported | requires_new | InsertUser 以非事务的方式执行,InsertCuser 创建了事务 |
6 | requires_new | never | InsertUser创建事务,InsertCuser 遇到事务报IllegalTransactionStateException异常 |
7 | never | requires_new | InsertUser非事务方式执行,InsertCuser 创建事务 |
8 | requires_new | nested | InsertUser 将事务传播给InsertCuser ,两者使用同一事务 |
9 | nested | requires_new | 两者各自创建了事务,相互隔离。互不影响 |