/*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); } }