2 回答
TA贡献1868条经验 获得超4个赞
这是因为您正在@Transactional从同一个 bean 中调用方法。
@Transactional仅适用于在 spring 创建的代理上调用的方法。这意味着,当您创建一个@Service或其他 bean 时,从外部调用的方法将是事务性的。如果从 bean 中调用,什么都不会发生,因为它不通过代理对象。
最简单的解决方案是将方法移至另一个@Service或 bean。如果你真的想将它保存在同一个组件中,那么你需要调用它,以便它被 spring AOP 包装在代理中。你可以这样做:
private YourClass self;
@Autowired
private ApplicationContext applicationContext;
@PostConstruct
public void postContruct(){
self = applicationContext.getBean(YourClass.class);
}
然后调用方法self将导致打开事务。
TA贡献1827条经验 获得超8个赞
标记非公共方法 @Transactional 既无用又具有误导性,因为 Spring 没有“看到”非公共方法,因此没有为它们的正确调用做准备。Spring 也没有为它调用的方法调用的方法做准备。
因此,标记私有方法,例如,@Transactional 只有在方法实际上被写入@Transactional 时才会导致运行时错误或异常。
添加回答
举报
