【发布时间】:2019-10-27 06:55:36
【问题描述】:
我有一个服务类,其方法 doSomething() 用 @transactional 注释,传播类型为“必需”。 另一个非事务类调用 doSomething() 两次。
我假设将为每个调用创建 2 个事务,但结果证明这两个调用只使用相同的事务。 为了进一步混淆我,我使用另一个 @RestController 非事务类调用了两次 doSomething()。但这次结果证明每次调用都使用不同的事务。
我有 2 个问题。
预期的行为是什么(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(){};
}
【问题讨论】:
-
我可以看出的一个区别是,第一类使用的是 Hibernate Transaction 管理器,而其余控制器使用的是 JTA 管理器,但我怀疑这就是区别所在?
-
如果第一种情况确实有一个tx,那么在已经存在的事务中调用普通类方法。
标签: java spring transactions