我使用带有@Transaction的接口,我有一个执行循环并检查一些信息的方法,但是这个循环需要很长时间才能完成它,并且我在数据库中添加了一个参数。在循环内部,检查参数,如果等于true,则循环将停止。
我的问题是检查参数,它没有得到更新的参数,它与参数的旧值保持一致。 有没有办法将事务保持在接口上并禁用特定方法?
答案 0 :(得分:0)
尝试将您的方法分成两部分并在其上放置“Requires new”检查参数,以便创建新事务并暂停当前事务(如果存在)。
@Transactional(propagation = Propagation.REQUIRES_NEW)
我希望我已经向你提供了有关你问题的所有答案。
答案 1 :(得分:0)
首先要说明为什么在接口上使用@Transaction,因为正确的方法是使用@Transactional注释来声明具体类(以及具体类的方法)。
从春季参考文档:
Spring建议您只使用@Transactional注释来注释具体类(以及具体类的方法),而不是注释接口。您当然可以将@Transactional注释放在接口(或接口方法)上,但这只能在您使用基于接口的代理时按预期工作。 Java注释不是从接口继承的事实意味着如果您使用基于类的代理(proxy-target-class =“true”)或基于编织的方面(mode =“aspectj”),那么事务设置是代理和编织基础设施无法识别,并且该对象不会被包含在事务代理中,这将是非常糟糕的。
然后您可以与我们分享您的代码吗?