事务专栏
原创
©著作权归作者所有:来自51CTO博客作者gblfy的原创作品,请联系作者获取转载授权,否则将追究法律责任
事务用法:
写一个配置类
@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这个注解添加这个注解
聚合项目建议在通用的模块中擦黄健配置类,其他项目,就不需要在写一遍了