一般事务都是配置在service层的,现在我有一个情况
比如:用户更改密码后要调用保存一个日志
public void changePassword(User user)throws Exception{
userDao.update(user);//更改密码
logService.saveLog(log);//保存日志
}
--------------------------------------------------------------
使用aop控制事务时,会在logService中的所有方法加上事务边界,同理,会在
userService中的指定方法也加上事务边界,那如果我在保存日志的过程中抛出
了异常,这时候 userDao.update(user);方法已执行并提交了。那这样说来,
service与service之间就无法事务同步了?
@Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional 的事务开启 ,或者是基于接口的 或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。
照楼主所说应该改成如下:
@Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
对spring事务的隔离级别,楼主还需要多阅读文档,你的问题一定是这个原因导致的.事务都是配置在service层的这个没错
所以你的数据库的操作应该写在一个service方法里
以你的情况
可以在userService里注入logService,然后在一个service里调用logService的方法即可如果说是因为userDao.update(user);方法已执行并提交了导致changePassword方法无法按事务运行, 那即使saveLog不是事务的,changePassword还不是照样不能够实现事务?