在项目中,一个函数需要进行两条sql操作,两条sql操作为一个整体,期望是要不一起执行,要不都不执行,所以引入了事务管理。
遇到的问题&未解决的坑:
在一个@service实现了一个事务管理的函数,发现在另一个service里面添加此方法的@Autowired注解,事务管理失效
解决办法:
在@controller层调用此方法时添加 @Transactional注解
方法以及调用添加的注解:
@Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED,readOnly = false,rollbackFor = {Exception.class})
只要是函数内部发生exception及实现回滚
方法级别:
controller层级别:
新发现 :
如果实现事务管理的service不被别的service调用,则不需要在controller层添加事务注解,如果被别的service调用,则事务管理失效,此时可以在controller层加上事务管理的注
解,service层加不加事务管理注解不起作用