spring + mybatis 수 동 데이터 원본 전환

최근 작업 중 에 Oacle 의 서로 다른 사용자 가 내 린 시 계 를 방문 해 야 하 는 항목 을 만 났 습 니 다. 그래서 인터넷 친구 들 의 방안 을 본 떠 수 동 으로 데이터 원본 을 전환 하 는 방법 은 다음 과 같 습 니 다.
우선 프로젝트 의 spring - config. xml 을 수정 하고 수 정 된 부분 은 다음 과 같 습 니 다.

	  
        
       
	   
	
	
	  
        
       
       
	
  
	
	
	        
	        
	            
	                
	                
	            
	        
	
 

	
		
		
		
		
		
			
				
				
			
		
	

그리고 추가 MultipleDataSource. java, 다음 과 같 습 니 다.
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class MultipleDataSource extends AbstractRoutingDataSource {
    private static final ThreadLocal dataSourceKey = new InheritableThreadLocal();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }
    @Override
    protected Object determineCurrentLookupKey() {
        return dataSourceKey.get();
    }
}

마지막 으로 데이터 베 이 스 를 조작 하 는 클래스 에서 통과 합 니 다. MultipleDataSource.setDataSourceKey("dataSource_fy");수 동 (메모: 기본 데이터 원본 을 수 동 으로 전환 해 야 합 니 다)
다음 과 같이 전환 합 니 다.
 //       GDFY
                    MultipleDataSource.setDataSourceKey("dataSource_fy");
                    List list = czYsxxService.getUniteListByCondition(syncSearch);
                    if (list == null || list.size() == 0) {
                        logger.info("          :  id:"+id+",    :"+payNoticeNo+"          ,        ");
                        int c = czYsxxService.insertSelective(ysxx);
                        //      GDWSJF
                        MultipleDataSource.setDataSourceKey("dataSource");
                        if (c > 0) {
                            logger.info("          :  id:"+id+",    :"+payNoticeNo+"          ,    ");
                            UnitePayInfo record = new UnitePayInfo();
                            record.setUnitePayInfoId(id);
                            record.setBy2("1");//    
                            record.setPushTime(time);//     
                            record.setUnitRespMsg("    ");//     
                            plusCjgPayInfoService.updateUnitePayInfoForSchedule(record);
                            logger.info("          :  id:"+id+",    :"+payNoticeNo+"          ,    ,         ");
                        }
                    } else {
                        //      GDWSJF
                        MultipleDataSource.setDataSourceKey("dataSource");
                        logger.info("          :  id:"+id+",    :"+payNoticeNo+"         ,             ");
                        UnitePayInfo record = new UnitePayInfo();
                        record.setUnitePayInfoId(id);
                        record.setBy2("1");//    
                        record.setPushTime(time);//     
                        record.setUnitRespMsg("    ");//     
                        plusCjgPayInfoService.updateUnitePayInfoForSchedule(record);
                    }

좋은 웹페이지 즐겨찾기