Spring@Transactional在放置方面后不会回滚

Spring@Transactional在放置方面后不会回滚,spring,transactions,rollback,transactional,aspect,Spring,Transactions,Rollback,Transactional,Aspect,我有两个事务方法,一个在另一个内部。如果未在方法周围设置around aspect,则事务性anotation可以很好地工作。在调用methodA之后,我们调用methodB,methodB在DB中写一些东西,然后返回methodA,抛出异常,然后methodB返回。 但是当我将我的方面放在methodA周围时,methodB不会回滚。我不知道那里发生了什么事。我尝试了许多传播属性的组合,但似乎都不起作用。 提前谢谢。 我使用Spring2.5.4 我在applicationContext.xm

我有两个事务方法,一个在另一个内部。如果未在方法周围设置around aspect,则事务性anotation可以很好地工作。在调用methodA之后,我们调用methodB,methodB在DB中写一些东西,然后返回methodA,抛出异常,然后methodB返回。 但是当我将我的方面放在methodA周围时,methodB不会回滚。我不知道那里发生了什么事。我尝试了许多传播属性的组合,但似乎都不起作用。 提前谢谢。 我使用Spring2.5.4

我在applicationContext.xml中有以下配置:

<!-- Aspect -->
<bean id="logAspect" class="LoggingAspect" />
<aop:config>
    <aop:aspect id="aspectLoggging" ref="logAspect" >
        <aop:pointcut id="testAround" expression="execution(* methodA(..))" />
        <!-- @Around -->
        <aop:around method="logProcess" pointcut-ref="testAround" />
    </aop:aspect>
</aop:config>
方法B是这样的:

@Transactional(rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
public something methodA() throws Exception {
    methodB();
    ...
    throw new Exception("message ...");
    ...
}
@Transactional(rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
public void methodB() throws Exception {
    <!-- insert something in db --<
}
@Transactional(rollboor=Exception.class,propagation=propagation.REQUIRED)
public void methodB()引发异常{
你的方面是否有缺陷

  • 您必须始终从周围的方面返回对象
  • 永远不要抓住并吞下一个例外
  • 你的方面是否有缺陷

  • 您必须始终从周围的方面返回对象
  • 永远不要抓住并吞下一个例外
  • 你的方面是否有缺陷

  • 您必须始终从周围的方面返回对象
  • 永远不要抓住并吞下一个例外
  • 你的方面是否有缺陷

  • 您必须始终从周围的方面返回对象
  • 永远不要抓住并吞下一个例外

  • 现在它完全按照我想要的工作。谢谢你的迅速和详细的回复。现在它完全按照我想要的工作。谢谢你的迅速和详细的回复。现在它完全按照我想要的工作。谢谢你的迅速和详细的回复。现在它完全按照我想要的工作。谢谢你的迅速和详细的回复。
    @Transactional(rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
    public void methodB() throws Exception {
        <!-- insert something in db --<
    }
    
    public void logProcess(ProceedingJoinPoint joinPoint) throws Throwable { ... }
    @Aspect
    public class LoggingAspect {
        public Object logProcess(ProceedingJoinPoint joinPoint) throws Throwable {
            <!-- some code before -->
            try {
                Object result = joinPoint.proceed();
                <!-- some code after -->
                return result;
            } catch (Exception e) {
                log.info(e.getMessage());
                <!-- some code here -->     
                throw e;
            }   
        }
    }