springboot中使用事物(手动回滚动,集成shiro框架使用的问题)

简单使用

1.启动类上使用注解(springboot2 可以不使用)

@EnableTransactionManagement

2.server层实现类方法上使用注解(在类上使用代表全部方法使用注解(不建议使用))

  //rollbackFor = Exception.class 代表报这错就回滚动 不加默认是RuntimeException异常回滚
     @Transactional(rollbackFor = Exception.class)
    @Override
    public ResponseData update_password (String pwd, String originalPwd){
           //数据库操作...
       }

手动回滚(配合try-catch)

  @Transactional(rollbackFor = Exception.class)
    @Override
    public ResponseData update_password (String pwd, String originalPwd){
           //数据库操作...
            try{
               int i=1/0;
             }catch(Exception e){
             //手动回滚
              TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            }
       }
       //也可以根据自己业务判断,手动回滚

手动回滚(回滚一部分,结点)

  @Transactional(rollbackFor = Exception.class)
    @Override
    public ResponseData update_password (String pwd, String originalPwd){
                //数据库操作1..
                //设置回滚动的结点
      Object savepoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
           //数据库操作2...
           
          //手动回滚动到结点  只回滚数据库2操作,数据库1操作不回滚
          TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savepoint);
       }

集成shiro权限框架

错误:org.springframework.transaction.NoTransactionException: No transaction aspec
这是spring无法创建事物管理器对象,被shiro权限框架抢了,在自定义Reamls中,我们会使用用户实现类去查密码,这样子这个用户实现类就不会被创建事物管理器了,

解决方法:
延迟加载就好了,在自定义Reamls中,给自动注入实现类加一个注解

         @Lazy    //延迟加载:使用到这个类时才注入  
        @Autowired
        private UserInfoService userService;

@Transactional注解是可以带参数的
value String 可选的限定描述符,指定使用的事务管理器
propagation enum: Propagation 可选的事务传播行为设置
isolation enum: Isolation 可选的事务隔离级别设置
readOnly boolean 读写或只读事务,默认读写
timeout int (in seconds granularity) 事务超时时间设置
rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组
rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组
noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值