Spring中注解: @Transactional 事务处理
2014-11-27 09:39
447 查看
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
JDBC的SavePoint在应用层的体现,可以对某一部分操作单独commit/rollback.
事务的隔离级别 Isolation:
事务的隔离级别是指并发的事务之间对同一数据进行读取或者修改时在多大程度上可以看到对方的结果。EJB和Spring都可以设置隔离的等级,但是这种设置严重依赖于底层数据库的支持。
TransactionReadUmcommitted
ISOLATION_READ_UNCOMMITTED
事务之间可以访问对方已经修改但未commit的数据;
TransactionReadCommitted
ISOLATION_READ_COMMITTED
事务之间只能访问对方已经commit的数据;
TransactionRepeatableRead
ISOLATION_REPEATABLE_READ
保证同一个事务中读取的数据总是相同的,即本事务提交之前看不到其他事务对数据作的修改,即使其他事务已经
提交;
TransactionSerializable
ISOLATION_SERIALIZABLE
对同一数据的修改只能顺序进行
注解可加在方法前,例如:
以下内容引自: 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
JDBC的SavePoint在应用层的体现,可以对某一部分操作单独commit/rollback.
事务的隔离级别 Isolation:
事务的隔离级别是指并发的事务之间对同一数据进行读取或者修改时在多大程度上可以看到对方的结果。EJB和Spring都可以设置隔离的等级,但是这种设置严重依赖于底层数据库的支持。
TransactionReadUmcommitted
ISOLATION_READ_UNCOMMITTED
事务之间可以访问对方已经修改但未commit的数据;
TransactionReadCommitted
ISOLATION_READ_COMMITTED
事务之间只能访问对方已经commit的数据;
TransactionRepeatableRead
ISOLATION_REPEATABLE_READ
保证同一个事务中读取的数据总是相同的,即本事务提交之前看不到其他事务对数据作的修改,即使其他事务已经
提交;
TransactionSerializable
ISOLATION_SERIALIZABLE
对同一数据的修改只能顺序进行
注解可加在方法前,例如:
/** * 交易处理 */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Override @Transactional(rollbackFor={DrawCreditException.class},timeout = 30) public Map drawCreditAmt(Map requestDataMap) throws Exception{ Map resultMap = new HashMap(); String acctNo = (String)requestDataMap.get("acctNo"); logger.info("交易请求处理开始-----acctNo="+acctNo); //1 先对帐户进行加锁 creditAmtManagerSerive.lockAccount(acctNo); logger.info("交易请求处理校验开始-----acctNo="+acctNo); //2 查看客户当前是否有在处理中的交易请求,有则处理失败,无则进入 String checkLock = existsDrawCreditRequestOnWay(requestDataMap); if(StringUtils.isNotEmpty(checkLock)){ resultMap.put("resultCode", PROCSS_FAIL); resultMap.put("resultMsg", InterfaceReturnInfoUtils.ERROR_MSG_000003_DT2); return resultMap; } //3 校验动用额度是否在可用额度范围内 String checkResult = checkDrawAmtInUsableRange(requestDataMap); if(StringUtils.isNotEmpty(checkResult)){ resultMap.put("resultCode", PROCSS_FAIL); resultMap.put("resultMsg", InterfaceReturnInfoUtils.ERROR_MSG_000002_DT11); return resultMap; } logger.info("交易请求处理校验结束--acctNo="+acctNo); try{ //4 更新可用余额(即从总的可用余额中减去本次交易金额) creditAmtManagerSerive.updateCreditAmt(acctNo, TRX_TYPE_DB, new BigDecimal((String)requestDataMap.get("trxAmt")),new Date()); //5 异步调用交易功能 callDrawCreditAmtMethod(requestDataMap); }catch(Exception e){ logger.info("帐户acctNo=["+acctNo+"]交易请求处理异常",e); throw new DrawCreditException("帐户acctNo=["+acctNo+"]交易请求处理异常"); } logger.info("交易请求校验结束,已放入交易队列,请等待执行结果--acctNo="+acctNo); resultMap.put("resultCode", PROCESS_SUCCESS); return resultMap; }
相关文章推荐
- spring@Transactional注解事务不回滚不起作用无效的问题处理
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- Spring中注解: @Transactional 事务处理
- spring中@Transactional对于事务异常的处理
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring中注解事务@Transactional说明
- Spring 之注解事务 @Transactional
- Spring学习5-Spring整合JDBC及其事务处理(注解方式)
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring 注解学习手札(五) 业务层事务处理
- spring声明式事务处理-注解
- Spring 下事务管理-使用AOP @Transactional注解管理
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring 之注解事务 @Transactional
- Spring事务注解@Transactional的坑爹陷阱
- Spring MVC @Transactional注解方式事务失效的解决办法