zoukankan      html  css  js  c++  java
  • springboot 中使用事务

    直接在service 层的方法上加上@Transactional 注解就ok。

    注意事项:

    1、Spring 基于注解的声明式事物 @Transactional 默认情况下只会对运行期异常(java.lang.RuntimeException及其子类)和 Error 进行回滚。

    2、数据库引擎要支持事物,使用InnoDB。

    3、@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.

    4、看到网上好多人说要在启动类(配置类)上加  @EnableTransactionManagement 来开启事务支持。

     

    经过测试并不需要。

    spring aop  异常捕获原理:

    被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回滚  

    换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚

    想要不向上抛异常,也就是在service就捕获异常,而且注解还生效的方法:

    在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常

  • 相关阅读:
    Minimum Size Subarray Sum 最短子数组之和
    mutiplemap 总结
    Remove-Invalid-Parentheses-题解
    Splay-Tree理解
    Subsets LeetCode总结
    Trie树理解
    Treap树理解
    Trie树之C-实现
    word-ladder总结
    Javascript 对象
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/9474807.html
Copyright © 2011-2022 走看看