事务用法:
写一个配置类
@EnableTransactionManagement
@Configuration
public class TransactionManagementConfig {}
在需要事物的方法上添加 @Transactional注解即可,
特殊场景:注解也加了为什么还是不生效,
建议,
1>先确认是什么异常
2>如果是运行时异常,事务是生效的,如果抛出的是Exception异常
还需要在注解上加上rollbackFor = Exception.class,才可以
/*** 保存,id有值时更新,无值时新增*/@Transactional(rollbackFor = Exception.class)public void save(SectionDto sectionDto) {Section section = CopyUtil.copy(sectionDto, Section.class);if (StringUtils.isEmpty(sectionDto.getId())) {this.insert(section);} else {this.update(section);}courseService.updateTime(sectionDto.getCourseId());}
同一个类内部方法相互调用,methodA调用methodB,B的事务不起作用,Spring的事务处理利用AOP生成动态代理类,内部方法调用不经过代理类,因此,事务不生效。
@EnableTransactionManagement这个注解直接写到启动类上也可以,为什么还要创建配置类呢?
非聚合项目可以直接在启动类上@EnableTransactionManagement这个注解添加这个注解
聚合项目建议在通用的模块中擦黄健配置类,其他项目,就不需要在写一遍了