如下:a同步方法调用b事务方法,自己尝试过还是会出现脏数据。不知道为什么,必须要调用另一个service层的另一个b方法才能保证不产生脏数据。
@Service
class aaa{
public synchronized void a(){
b();
}
@Transactional(rollbackFor = Exception.class)
public void b() throws Exception {
//...
}
}
这个就是你对声明式事务有一定的了解,spring只会对有@Transaction注解的方法进行代理,对没有这个注解的方法不会进行代理。
由于你的a方法没有声明事务支持,所以a在进行调用时使用的是this,而不是代理对象,事务自然不会生效。
第一个回答已经解释的很明白,如果还不懂可以看看这边的文章事务不生效解析