我是靠谱客的博主 飘逸钢笔,最近开发中收集的这篇文章主要介绍Spring中注解: @Transactional 事务处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Spring中注解: @Transactional 的属性说明

以下内容引自: http://neo19860208.iteye.com/blog/1602314

事务的传播属性 Propagation

Required    PROPAGATION_REQUIRED

如果客户端已经包含在事务上下文中,则服务端加入客户端事务;如果客户端没有事务上下文,则

容器为服务端新启一个事务。

RequiresNew    PROPAGATION_REQUIRES_NEW

如果客户端包含在事务上下文中,则容器采取如下步骤:

1. 挂起客户端事务;2. 启动一个新事务;3. 在新事务中完成服务端调用;4. 重启客户端事务;

如果客户端没有包含事务上下文,容器为服务端新启动一个事务.

Mandatory   PROPAGATION_MANDATORY

如果客户端已经包含在事务上下文中,则服务端加入客户端事务;如果客户端没有事务上下文,则容器抛出异常TransactionRequiredException.

NotSupported  PROPAGATION_NOT_SUPPORTED

如果客户端已经包含在事务上下文中,则容器挂起客户端事务,服务端不运行在事务上下文中,调用结束后容器重启客户端事务

Supports   PROPAGATION_SUPPORTS

如果客户端已经包含在事务上下文中,则服务端加入客户端事务;如果客户端没有事务上下文,服务端不运行在事务上下文中.

Never  PROPAGATION_NEVER

如果客户端已经包含在事务上下文中,则容器抛出异常RemoteException;服务端不启动事务;

PROPAGATION_NESTED

 JDBCSavePoint在应用层的体现,可以对某一部分操作单独commit/rollback.

 

事务的隔离级别 Isolation

     事务的隔离级别是指并发的事务之间对同一数据进行读取或者修改时在多大程度上可以看到对方的结果。EJBSpring都可以设置隔离的等级,但是这种设置严重依赖于底层数据库的支持。

   TransactionReadUmcommitted    ISOLATION_READ_UNCOMMITTED

     事务之间可以访问对方已经修改但未commit的数据;

   TransactionReadCommitted    ISOLATION_READ_COMMITTED

      事务之间只能访问对方已经commit的数据;

   TransactionRepeatableRead   ISOLATION_REPEATABLE_READ

      保证同一个事务中读取的数据总是相同的,即本事务提交之前看不到其他事务对数据作的修改,即使其他事务已经

      提交;

   TransactionSerializable    ISOLATION_SERIALIZABLE

      对同一数据的修改只能顺序进行

 

注解可加在方法前,例如:

[java]  view plain copy 在code上查看代码片 派生到我的代码片
  1.  /** 
  2.   * 交易处理 
  3.   */  
  4.  @SuppressWarnings({ "rawtypes""unchecked" })  
  5.  @Override  
  6.  @Transactional(rollbackFor={DrawCreditException.class},timeout = 30)  
  7.  public Map drawCreditAmt(Map requestDataMap) throws Exception{  
  8.   Map resultMap = new HashMap();  
  9.   String acctNo = (String)requestDataMap.get("acctNo");  
  10.   logger.info("交易请求处理开始-----acctNo="+acctNo);  
  11.     
  12.   //1 先对帐户进行加锁  
  13.   creditAmtManagerSerive.lockAccount(acctNo);  
  14.     
  15.   logger.info("交易请求处理校验开始-----acctNo="+acctNo);  
  16.   //2 查看客户当前是否有在处理中的交易请求,有则处理失败,无则进入  
  17.   String checkLock = existsDrawCreditRequestOnWay(requestDataMap);  
  18.   if(StringUtils.isNotEmpty(checkLock)){  
  19.    resultMap.put("resultCode", PROCSS_FAIL);  
  20.    resultMap.put("resultMsg", InterfaceReturnInfoUtils.ERROR_MSG_000003_DT2);  
  21.    return resultMap;  
  22.   }  
  23.     
  24.   //3 校验动用额度是否在可用额度范围内  
  25.   String checkResult = checkDrawAmtInUsableRange(requestDataMap);  
  26.   if(StringUtils.isNotEmpty(checkResult)){  
  27.    resultMap.put("resultCode", PROCSS_FAIL);  
  28.    resultMap.put("resultMsg", InterfaceReturnInfoUtils.ERROR_MSG_000002_DT11);  
  29.    return resultMap;  
  30.   }  
  31.     
  32.   logger.info("交易请求处理校验结束--acctNo="+acctNo);  
  33.   try{  
  34.    //4 更新可用余额(即从总的可用余额中减去本次交易金额)  
  35.    creditAmtManagerSerive.updateCreditAmt(acctNo, TRX_TYPE_DB, new BigDecimal((String)requestDataMap.get("trxAmt")),new Date());  
  36.      
  37.    //5 异步调用交易功能  
  38.    callDrawCreditAmtMethod(requestDataMap);  
  39.      
  40.   }catch(Exception e){  
  41.    logger.info("帐户acctNo=["+acctNo+"]交易请求处理异常",e);  
  42.    throw new DrawCreditException("帐户acctNo=["+acctNo+"]交易请求处理异常");  
  43.   }  
  44.   logger.info("交易请求校验结束,已放入交易队列,请等待执行结果--acctNo="+acctNo);  
  45.     
  46.   resultMap.put("resultCode", PROCESS_SUCCESS);  
  47.   return resultMap; }  

最后

以上就是飘逸钢笔为你收集整理的Spring中注解: @Transactional 事务处理的全部内容,希望文章能够帮你解决Spring中注解: @Transactional 事务处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部