spring管理的事务中的日志记录

PROPAGATION_REQUIRES_NEW
这个就比较绕口了。比如我们设计ServiceA.methodA的事务级别为PROPAGATION_REQUIRED,ServiceB.methodB的事务级别为PROPAGATION_REQUIRES_NEW,
那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起一个新的事务,等待ServiceB.methodB的事务完成以后,
他才继续执行。他与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB是新起一个事务,那么就是存在
两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB是不会回滚的。如果ServiceB.methodB失败回滚,
如果他抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可能提交。

public void saveInOutMsg(BusiOrder busiOrder,String inOutType,String inOutContent,String remark) {
// TODO Auto-generated method stub
if("true".equals(Utility.LoadProperties("log4j.properties","is_record"))){
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) SpringContextFactory
.getBean("transactionManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); //事物隔离级别
TransactionStatus status = transactionManager.getTransaction(def); //获得事务状态
try {
TfBTradeInOutLog tfBTradeInOutLog = new TfBTradeInOutLog();
tfBTradeInOutLog.setTradeId(Long.valueOf(busiOrder.getTradeId()));
tfBTradeInOutLog.setSubscribeId(Long.valueOf(busiOrder.getSubscribeId()));
tfBTradeInOutLog.setServiceOfferId(Long.valueOf(busiOrder.getServiceOfferId()));
tfBTradeInOutLog.setInOutType(inOutType);
tfBTradeInOutLog.setRemark(remark);
tfBTradeInOutLog.setInOutContent(inOutContent);
tfBTradeInOutLog.setLogDate(Utility.getSystemTime());

tfBTradeInOutLogDao.add(tfBTradeInOutLog);
} catch (Exception e) {
// TODO Auto-generated catch block
transactionManager.rollback(status);
throw new BusiException(e.getMessage());
}
transactionManager.commit(status);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值