Spring中解决Aop 事务嵌套回滚问题

今天被坑了,这是部分代码

//组装操作日志  这个增强里面后面的两个参数必须一样,为函数执行后返回的结果
 @AfterReturning(value="addLog()",argNames="rtv",returning="rtv")
 public void packLogs(JoinPoint joinPoint,Object rtv) throws Throwable { 
     //获取方法名
     String methodName=joinPoint.getSignature().getName();
     //获取操作内容
     String opt_content=pakeOptionContent(joinPoint.getArgs(),methodName,rtv);
     logger.debug(opt_content);
     //组装操作sysLog
     sysLog=new SysLog();
     ipAddr=InetAddress.getLocalHost();
     sysLog.setLog_ip(ipAddr.getHostAddress());
     sysLog.setOpt_desc(opt_content);
     sysLog.setOpt_time(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
     sysLog.setOpt_user("cuibruce");
     sysLogService.saveLog(sysLog);


结果报最后这个syslogService.save的时候出错  说事务已经是rollbackonly了 。查了好多资料说则个事务嵌套 默认使用的是一个事务 ,不会创建新的事务,

但是我把事务标记为required_new也是不行啊 ,最后在application.xml中事务管理器中添加了如下的代码就好了 对事务传播有了一个更新的认识了、




    <!--配置事务-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
         <property name="globalRollbackOnParticipationFailure" value="false" />
    </bean>
    <jpa:repositories base-package="main" entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值