长时间听众第一次打电话。
我们有一个包含公共事务逻辑的AbstractService.java类。不是这个类中的所有方法都是事务性的。一旦是,就会用spring的@Transactional注释进行注释。
现在,AbstractService的每个实现都可能有不同的事务管理器。通过在抽象类中重写方法并提供不同的tx管理器,可以在具体类中配置这一点:
@Transactional(value=TRANSACTION_MANAGER)
不可能将事务管理器名称传递给抽象类,因为“注释属性Transactional.value的值必须是常量表达式”。
因此,据我所知,有两种方法可以配置事务管理器:
还有第三种选择吗?类似于现在不推荐的spring测试,@NotTransactional将与上面的选项2一起完成这个任务。
大约三年前,有一个非常相似的问题被问到了。自从春天发生了很多事以来,我们还有别的选择吗?
尽管它很简洁,但是自定义注释答案并没有解决这个问题。
我的问题可以概括为:
如何配置事务而不必覆盖所有事务性方法而只指定事务管理器?
发布于 2013-02-07 13:04:08
我建议您将AbstractService
重构为三个类:
AbstractService
、其接口、方法签名等,以保持二进制与任何现有的子类兼容,但所有实现都已被删除。@Transactional
注释(类级别上有正确的事务管理器)。现在,您只需将最后两个类自动放入重构的AbstractService
中,它只是将传入的方法调用委托给被移动到新创建的类中的实现。
https://stackoverflow.com/questions/14757486
复制