今天被坑了,这是部分代码
//组装操作日志 这个增强里面后面的两个参数必须一样,为函数执行后返回的结果
@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>