springboot事务管理

 /*spring事务管理
    注解:@Transactional
     位置:业务(service)层的方法上、类上、接口上
     作用:将当前方法交给spring进行事务管理,方法执行前,开启事务:成功执行完毕,提交事务:出现常,回滚事务

     需要在配置文件是加上开启spring事务yml文件格式
     # 开启事务管理日志
logging:
  level:
   org.springframework.jdbc.support.dbcTransactionManager: debug

     @Transactional()表示开启事务这个方法要么全部成功要么全部失败*/
    /*默认情况下Transactional在捕获运行时期异常
       要想捕获全部异常还需要设置rollbackFor = Exception.class
    */
    /*1.事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,
    REQUIRED【默认值】需要事务,有则加入,无则创建新事务,意思就是事务嵌套了和上级事务共用一个事务
    REQUIRES NEW 需要新事务,无论有无,总是创建新事务,意思就是事务嵌套了和单独创建新事务共用一个事务独立执行
    * */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void delesc(Integer id) throws Exception {
        try {
            jieshou.deletesc(id);
            int k = 1/0;
            if (true){
                throw new Exception();
            }
            remover.deleteremover(id);
        } finally {
            shijibo.Logclass("本次删除的"+ id);
        }


    }

//-----------------------------------------------------------------------------------

package com.example.tlias.longremark;
import com.example.tlias.mapperclass.logdiary;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;

/*propagation = Propagation.REQUIRES_NEW表示开启了一个新的事务当前事务执行才会
去执行上面一级嵌套的事务*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
//spring日志注解
@Slf4j
@Component
public class remarklog {
 @Autowired
public logdiary shizhi;

 public void Logclass(String remark){
     shizhi.logg(LocalDateTime.now(),remark);

 }
 
}

你可能感兴趣的:(spring,boot,java,数据库)