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