spring2 多数据库动态切换 案例

阅读更多
1. 创建class----SourceType.java
public enum SourceType {
    suning,
    english,
    gehualily
}


2. 创建class ---DynamicDataSource.java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  

public class DynamicDataSource extends AbstractRoutingDataSource{ 

       protected Object determineCurrentLookupKey() { 
              return JdbcContextHolder.getJdbcType(); 
       } 

} 


3. 创建class ----JdbcContextHolder.java

public class JdbcContextHolder {

	private static final ThreadLocal contextHolder = new ThreadLocal();

	public static void setJdbcType(SourceType jdbcType) {

		contextHolder.set(jdbcType);

	}

	/*
	 * public static String getJdbcType() { return (String) contextHolder.get(); }
	 */
   //默认的数据源
	public static SourceType getJdbcType() {
		SourceType str = (SourceType) contextHolder.get();
		if(str==null){
			str=SourceType.english;
		}
		return str;
	}

	public static void clearJdbcType() {
		contextHolder.remove();

	}

}




4. spring.xml:



	

 
 
 
 
 
	
 

 
 
 
 
 
  

 
 
 
 
 
  


  
          
              
                  
                 
                
              
          
                
         


	
		
		
		
			
				org.hibernate.dialect.MySQLDialect
				
				org.hibernate.connection.ProxoolConnectionProvider
				
				true
				true
				after_statement
				false
			
		
	

	
		
	


	


	
	

	
	

	
	
		
		
		
	
	
	
	

	

	


5.应用案例:

在使用方法之前,加上
JdbcContextHolder.setJdbcType(SourceType.english);

若不用枚举类,key值可以直接用字符串。

实体类和表都不用添加什么别的代码,经过测试,每个方法只可切换一次数据库。

你可能感兴趣的:(多数据库,动态,切换,spring,数据源)