纸上得来终觉浅,绝知此事要躬行
继续验证,这次的主角是
@Transactional(propagation= Propagation.SUPPORTS)
它总是使用调用者事务,若调用者没事务则以无事务状态执行
1、InsertUser 使用supports ,InsertCuser 不加注解
两者均以无事务的状态运行
2、InsertUser 不加注解,InsertCuser 使用supports
两者均以无事务的状态运行
3、InsertUser 使用supports ,InsertCuser 使用supports
两者均以无事务的状态运行
4、InsertUser 使用supports ,InsertCuser 使用mandatory
报异常
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'
5、InsertUser 使用mandatory,InsertCuser 使用supports
报异常
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'
6、InsertUser 使用supports,InsertCuser 使用requires_new
InsertUser 非事务方式执行,InsertCuser 创建了事务
7、InsertUser 使用requires_new ,InsertCuser 使用supports
InsertUser 将事务传播给InsertCuser ,两者使用同一事务
8、InsertUser 使用supports,InsertCuser 使用not_supported
两者均以无事务的状态运行
9、InsertUser 使用not_supported ,InsertCuser 使用supports
两者均以无事务的状态运行
10、InsertUser 使用supports,InsertCuser 使用never
两者均以无事务的状态运行
11、InsertUser 使用never ,InsertCuser 使用supports
两者均以无事务的状态运行
12、InsertUser 使用supports,InsertCuser 使用nested
InsertUser 非事务方式执行,InsertCuser 创建了事务
13、InsertUser 使用nested ,InsertCuser 使用supports
InsertUser 将事务传播给InsertCuser ,两者使用同一事务
大总结
实验 | InsertUser 调用者
|
InsertCuser 被调用者
|
结果 |
---|---|---|---|
1 | supports | 不加 | 两者均以无事务的状态运行 |
2 | 不加 | supports | 两者均以无事务的状态运行 |
3 | supports | supports | 两者均以无事务的状态运行 |
4 | supports | mandatory | 报异常 IllegalTransactionStateException |
5 | mandatory | supports | 报异常 IllegalTransactionStateException |
6 | supports | requires_new | InsertUser 非事务方式执行,InsertCuser 创建了事务 |
7 | requires_new | supports | InsertUser 将事务传播给InsertCuser ,两者使用同一事务 |
8 | supports | not_supported | 两者均以无事务的状态运行 |
9 | not_supported | supports | 两者均以无事务的状态运行 |
10 | supports | never | 两者均以无事务的状态运行 |
11 | never | supports | 两者均以无事务的状态运行 |
12 | supports | nested | InsertUser 非事务方式执行,InsertCuser 创建了事务 |
13 | nested | supports | InsertUser 将事务传播给InsertCuser ,两者使用同一事务 |