SSM多数据源配置事务回滚处理

解决 SSM多数据源配置(配置两个数据源)这篇文章的事务回滚问题!!
在实际项目中发现两个数据源操作的时候,在运行中出现错误时并没有进行事务回滚,研究发现,虽然把两个数据源分开,但是在回滚的时候并不清楚是哪个事务,此时需要在使用@Transaction时加入value=你使用的数据源对应的事务管理器即可。
另一个需要注意的点是spring-mvc.xml和spring.xml文件配置中,spring-mvc.xml需要配置扫描到controller层,排除service层;spring.xml需要配置排除controller层

下面贴下spring.xml,spring-mvc.xml和两个spring-mybatis.xml配置文件
spring-mvc.xml:




  
	
		
		
	

	
		
		
		
		
	

	
	
		
		
	
	

spring.xml





	
		
	

	

spring-mybatis.xml和spring-mybatis-two.xml




	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

	
	
		
		
		
		
	

	
		
		
	
	
    
	
	
		
	

	
	 




	
	
        
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		

		
		
		
		

		
		
		
		
		
		

		
		
		
    	

	
	
		
		
		
		
	

	
		
		
	
	
	
	
		
	
	
	
	 


事务使用示例:
假设controller有个方法分别调用两个数据库:

    @RequestMapping("/XXX")
	@ResponseBody
	public ResultMsg autoAssignTask(HttpServletRequest request, TbIspTaskVo parainfo, VassignTaskModel assigninfo) {
		ResultMsg msg = new ResultMsg()	
		.....
		try{
			if(OpenDeptUtil.openDept(deptCod)){
			    //调用新数据库
				msg=qrHbseiCodeService.autoAssignhbseiTask(parainfo,assigninfo);
			}else {
			   //调用旧数据库
				msg=qrCodeService.autoAssignTask(parainfo,assigninfo);
			}
		}catch (Exception e){
			......
		}
		return  msg;
	}

假设调用的新数据库的实现层service方法为:

    @Transactional(value="hbseiTransactionManager")
	public ResultMsg autoAssignhbseiTask(TbIspTaskVo parainfo, VassignTaskModel assigninfo) throws Exception{
		ResultMsg msg=new ResultMsg();
}

这里是调用的spring-mybatis-two.xml链接的数据库,此时如果需要事务控制的话需要指明事务名称@Transactional(value=“hbseiTransactionManager”)即可。

你可能感兴趣的:(SSM多数据源配置)