spring事物管理

事务

1.什么是事务?

    事务是我们要执行的一系列操作,要么完全执行,要么完全不执行。这样可以确保所有的操作都成功,否者不会跟新数据库。 

2.事务有两种结果:

    所有的操作执行成功,提交事务。如果有一个操作执行失败,将发生回滚,撤销之前到事务发生开始时执行的操作。

3.spring的事务使用:

有两个类DataSourceTransactionManager,DefaultTransactionDefinition

执行过程:开启事务-》执行操作-》如果执行成功提交事务,如果发生异常就回滚事务。

spring的具体代码:

/**
 * 
 * @author junwei.ou
 * 任务管理
 *
 */
public class ScoreTask {

	@Resource
	private DataSourceTransactionManager transactionMapper;
	
	@Resource
	private DefaultTransactionDefinition  transactionDefinition;
	
	public void update(Map<?,?> resData){
		TransactionStatus status = transactionMapper.getTransaction(transactionDefinition);
		String dd =(String)resData.get("accNo");
			String orderid = (String)resData.get("orderId");
			String acco[]=ScoreConstant.GET_ACCNO();
			if(dd.equals(acco[0])){
				OrderTrade2 trade = orderTradeService.getOrderTradeBySeriNum(orderid);  //根据订单号查询订单
				String[] ratio = ScoreConstant.SCORE_DOUBLE_RATIO();
				int score = (int)( Double.parseDouble(ratio[0])*trade.getRealPay()); //应增加的双倍积分
				
				User2Example ex = new User2Example();
				ex.createCriteria().andOpenIdEqualTo(trade.getOpenId());  //根据OpenId得到用户信息
				List<User2> user2List = user2Mapper.selectByExample(ex);   
				User2 user = user2List.get(0);
				int ss = user.getScore()==null?0:user.getScore();
				user.setScore(score+ss);   //更新用户信息
				try {
					user2Mapper.updateByOpenId(user);
					trade.setState(1);
				//	orderTradeService.updateById2(trade);   //跟新订单信息
					orderTrade2Mapper.updateByPrimaryKey(trade);
					//双倍积分记录
					UserScore userScore= new UserScore();
			           userScore.setOpenId(trade.getOpenId());
			           userScore.setScoreNumber(score);
			           userScore.setScoreDescrible("联名卡双倍积分 订单编号"+trade.getOrderSerioNum());
			           userScore.setCreateTime(new Date());
			           userScore.setScoreTyple(2);
			           int number=userScoreMapper.insert(userScore);
			           System.out.println(number);
			           transactionManager.commit(status); //提交事务并跟新数据库
				} catch (Exception e) {
					e.printStackTrace();
					transactionManager.rollback(status);//发生异常时回滚事务
				}
			}
	}
}
注意:一定不能缺少下面这句代码 transactionMapper.commit(status);   

 

 spring的事务配置的方法。 

spring配置文件中有三种组成: 
其中有DataSource、TransactionManager和代理机制这三部分 

 

 

猜你喜欢

转载自435727748.iteye.com/blog/2231925