0
点赞
收藏
分享

微信扫一扫

spring事务和aop同时使用,事务不生效

Star英 2021-09-28 阅读 20
码哥

spring事务和aop同时使用

  • 使用aop的地方设置order如下:
@Order(1)
@Component
@Aspect
public class AopDaoRunTime {
    private static final Logger LOGGER = LoggerFactory.getLogger(AopDaoRunTime.class);
    @Around("execution(* com.qunar.lfz.dao.impl.*.*(..))")
    public Object printDaoTime(ProceedingJoinPoint point) {
        String methodName = point.getSignature().getName();
        Object result = null;
        try {
            long startTime = System.currentTimeMillis();
            result = point.proceed();
            long endTime = System.currentTimeMillis();
            LOGGER.info("{}方法执行时间为{}ms", methodName, endTime - startTime);
        } catch (Throwable e) {
            LOGGER.error("获得dao执行方法时间出错", e);
            return null;
        }
        return result;
    }
}
  • 配置spring事务和aop的xml:
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <tx:annotation-driven transaction-manager="transactionManager" order="2"/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="xxx"/>
    </bean>

  • spring手动回滚

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

举报

相关推荐

0 条评论