您当前的位置: 首页 >  spring

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring对事物的支持

wespten 发布时间:2018-08-21 02:16:15 ,浏览量:0

事物满足四个条件

原子性,一致性,隔离性,持久性

bean.xml配置文件



        
	
        
        
        
        
    
    
    
    
    	
    
    
    
    	
    
     
	
    
    
    	
    
	
	
	
		
	 
	
	
		
		
	 
	

Dao接口的实现类

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

public class BankDaoImpl implements BankDao{

	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	
	
	public void setNamedParameterJdbcTemplate(
			NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
		this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
	}
	
	@Override
	public void inMoney(int money, int userId) {
		// TODO Auto-generated method stub
		String sql="update t_count2 set count=count+:money where userId=:userId";
		MapSqlParameterSource sps=new MapSqlParameterSource();
		sps.addValue("money", money);
		sps.addValue("userId", userId);
		namedParameterJdbcTemplate.update(sql,sps);
	}

	@Override
	public void outMoney(int money, int userId) {
		// TODO Auto-generated method stub
		String sql="update t_count set count=count-:money where userId=:userId";
		MapSqlParameterSource sps=new MapSqlParameterSource();
		sps.addValue("money", money);
		sps.addValue("userId", userId);
		namedParameterJdbcTemplate.update(sql,sps);
	}

}

service

在同一个事物中

public interface BankService {

	/**
	 * A向B转账count元
	 * @param count
	 * @param userIdA
	 * @param userIdB
	 */
	public void transferAccounts(int count,int userIdA,int userIdB);
}

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;


public class BankServiceImpl implements BankService{

	private BankDao bankDao;
	
	private TransactionTemplate transactionTemplate;
	
	public void setBankDao(BankDao bankDao) {
		this.bankDao = bankDao;
	}
	
	


	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}




	@Override
	public void transferAccounts(final int count, final int userIdA, final int userIdB) {
		// TODO Auto-generated method stub
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			
			@Override
			protected void doInTransactionWithoutResult(TransactionStatus arg0) {
				// TODO Auto-generated method stub
				bankDao.outMoney(count, userIdA);
				bankDao.inMoney(count, userIdB);				
			}
		});
	}

}
private ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
	

	public void transferAccounts() {
		BankService bankService=(BankService)ac.getBean("bankService");
		bankService.transferAccounts(50, 1, 2);
	}

注解声明式添加事物

spring配置AOP,事物通知。切得都切方法



        
	
        
        
        
        
    
    
    
    
    	
    
    
    
    
    	  
              
              
              
              
              
              
              
              
              
              
              
              
              
              
          
    
    
    
    
    	
    	
    	
    	
    
    
 
     
	
    
    
    	
    
	
	
	
		
	 
	
	
		
	 
	

使用注解配置事物

织如事物管理器



        
	
        
        
        
        
    
    
    
    
    	
    
    
    
     
	
    
    
    	
    
	
	
	
		
	 
	
	
		
	 
	
import org.springframework.transaction.annotation.Transactional;


@Transactional
public class BankServiceImpl implements BankService{

	private BankDao bankDao;
	
	public void setBankDao(BankDao bankDao) {
		this.bankDao = bankDao;
	}
	

	@Override
	public void transferAccounts(int count, int userIdA, int userIdB) {
		// TODO Auto-generated method stub
				// TODO Auto-generated method stub
		bankDao.outMoney(count, userIdA);
		bankDao.inMoney(count, userIdB);				
	}

}

事物传播行为

一个service调用另一个service的方法,产生事物的嵌套

在xml中配置propagation来实现

required 如果当前没有事物则新建一个事物

supports 支持当前事物,如果没有事物非事物方式执行

mandatory 支持当前事物,没有抛出异常

requires-new 新建事物,当前存在事物,把当前事物挂起

not_supported 以非实物方式执行操作,当前存在事物,事物挂起

never 非事物方式执行,如果存在事物,报错

 

 

 

 

关注
打赏
1665965058
查看更多评论
立即登录/注册

微信扫码登录

0.0426s