在调用方法的事务边界内运行方面

时间:2016-02-09 08:07:29

标签: spring aop spring-aop spring-transactions

我有一个使用spring @Transactional和另一个自定义注释@Counter注释的方法。来自不同类的许多其他方法使用@counter

@Transactional
@Counter
public int myMethod() {
....
}

@Counter被一个方面拦截,该方面执行一些与计数相关的逻辑并保存到数据库并标记为@Transactional,因此在与myMethod()不同的事务中完成。

当我调用此myMethod()时,首先调用此方面,然后在完成后创建myMethod()的事务,然后在myMethod()中执行业务逻辑。

这里的问题是,如果在myMethod()中抛出任何异常,它会回滚所有更改。但由于@Counter处于不同的事务中,它仍在处理和执行与计数器相关的更新,并且不会回滚与计数器相关的更改。

我的问题是:是否有可能将@Counter的方面也置于myMethod()的同一转换范围内?是否可以在调用myMethod()之前为@Counter创建交易?

编辑1:我已尝试使用@Order(值5)表示周围方面,并且myMethod()交易顺序将从上下文xml推断

<tx:annotation-driven transaction-manager="transactionManager" order = "1"/>

只有在方面完成后才会创建仍然事务

编辑2:

 @Aspect
    public class CounterHandler {
        @Autowired
        private counterOperation CounterOperation;
        @Around("@annotation(com.prime.monitor.counter.aspect.Counter)")
        public Object aroundAdvice(final ProceedingJoinPoint methodInvocation) {
          //counter related operation
          return counterOperation.prepareCounter(methodInvocation);
        }
}

0 个答案:

没有答案