我遇到了事务配置子类化的问题。
我有一个有这种方法的A类:
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<ModificaOperativitaRapporto> eventMessage) {
// some dao operations
return eventMessage;
}
然后B类继承A类并重写激活方法
InserimentoCanaleActivator extends ModificaOperativitaRapportoActivator ....
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<ModificaOperativitaRapporto> eventMessage) {
// others dao operations
return super.activate(eventMessage);
我需要在单独执行super方法时有自己的事务,但是当执行B类方法时,所有操作都需要参与同一事务。
有什么想法吗?
答案 0 :(得分:1)
事务将整个方法调用包装在bean中,但是它应用于bean的级别而不是该方法的各个类实现的级别。 基本上,Spring使用AOP处理事务。它的作用是将代理对象作为bean本身。代理管理事务的启动,在实现类中运行方法,然后在返回的路上完成事务(提交或回滚)。这是一种优雅的方式,比任何手动方法都简单得多(考虑到Java的限制)。
代理机制一旦应用(通过@Transactional
注释加上一些其他配置),就会查看要执行的事务处理类型(注释的propagation
参数)和选择正确的行动。在您的情况下,如果您希望超类具有@Transactional(propagation=REQUIRES_NEW)
而子类具有@Transactional(propagation=REQUIRED)
,那么我希望它能够工作;超类的注释将被忽略,因为注释机制将首先看到子类的注释并停止查看。