Spring是如何管理事务的之@Transactional注解详解
往期热门文章: 1、去腾讯面试,直接让人出门左拐 :幂等性都不知道! 2、面试官:如果要存 IP 地址,用什么数据类型比较好?99%人都会答错! 3、面试官:为什么不能将实数作为 HashMap 的 key? 4、Redis 官方可视化工具,高颜值,功能太强大! 5、不好意思, Maven 该换了!
背景
Spring 事务的传播行为
TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。 TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。 TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。 TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。 TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
Spring事务的回滚机制
@Transactional 注解底层实现
@RestController
public class TransactionalController {
@Autowired
private TransactionalService transactionalService;
@PostMapping("transactionalTest")
public void transacionalTest(){
transactionalService.transactionalMethod();
}
}
public interface TransactionalService {
void transactionalMethod();
}
总结
就是 @Transactional 注解保证的是每个方法处在一个事务,如果有 try 一定在 catch 中抛出运行时异常。
方法必须是 public 修饰符。否则注解不会生效,但是加了注解也没啥毛病,不会报错,只是没卵用而已。
this. 本方法的调用,被调用方法上注解是不生效的,因为无法再次进行切面增强。
转自:范学博
链接:https://blog.csdn.net/fanxb92/article/details/81296005
最近热文阅读:
1、面试官:如果要存 IP 地址,用什么数据类型比较好?99%人都会答错! 2、面试官:为什么不能将实数作为 HashMap 的 key? 3、Redis 官方可视化工具,高颜值,功能太强大! 4、不好意思, Maven 该换了! 5、面试官 | Spring Boot 项目如何统一结果,统一异常,统一日志? 6、基于SpringBoot+MyBatis+Vue的音乐网站 7、聊聊接口优化的几种方法 8、面试官 | Spring Boot 项目如何统一结果,统一异常,统一日志? 9、为什么不建议使用ON DUPLICATE KEY UPDATE? 10、Java8 Stream,过分丝滑! 关注公众号,你想要的Java都在这里
评论