两次调用Required传播的事务函数只会产生一个事务(但从另一个类调用时会产生两个事务)



我有一个服务类,其方法doSomething((注释为@transactional,传播类型为"required"。另一个非事务类调用doSomething((两次。

我假设会有两个事务,为每个调用创建,但结果是两个调用都只使用相同的事务。为了进一步混淆我,我使用另一个@RestController非事务类调用了doSomething((两次。但这一次,它为每个呼叫使用了不同的事务。

我有两个问题。

预期行为是什么(1或2笔交易(

为什么这里有区别?

NormalClass{
@Autowired
Service service;
service.doSomething();
// same transaction used
service.doSomething(); 
}
RestController{
@Autowired
Service service;
service.doSomething();
// new transaction used
service.doSomething();
}
Service{
@Transactional
doSomething(){};
}

感谢@JB Nizet,您说得对,有一个由NormalClass扩展的抽象类已经获得了事务。我没想到抽象类会这么做。

最新更新