Spring多数据源XML配置


目录
  • 1 Spring中XML配置多数据源
    • 1.1 传统方式
    • 1.2 使用AbstractRoutingDataSource实现

1 Spring中XML配置多数据源

点击了解SpringBoot多数据源配置

1.1 传统方式

配置文件

        
            
	   
	     classpath:config.properties            
	        


配置数据源



        
        
        
        



        
        
        
        

添加sessionFactory


    
        
    

    
           
    

使用双数据库 dao层









1.2 使用AbstractRoutingDataSource实现

由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。
具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑

数据源的名称常量类

public class DataSourceConst {
 
 public static final String Admin="12";
 public static final String User = "123";
}

建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称

public class DataSourceContextHolder {
 
 private static final ThreadLocal contextHolder = new ThreadLocal(); // 线程本地环境
 // 设置数据源类型
   public static void setDataSourceType(String dataSourceType) { contextHolder.set(dataSourceType);
    
   }
   // 获取数据源类型   
   public static String getDataSourceType() {
 return (String) contextHolder.get();
    }
   // 清除数据源类型
      
    public static void clearDataSourceType () {
    contextHolder.remove();
 }
}

建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串

public class DynamicDataSource extends AbstractRoutingDataSource {
 
 @Override
 protected Object determineCurrentLookupKey() {
 
  return DataSourceContextHolder.getDataSourceType();
 }
 
}

编写spring的配置文件配置多个数据源


 
  
  
  
   root
  
  
   root
  
 
 
 
 
  
   jdbc:mysql://localhost:3306/test
  
 
 
 
  
   jdbc:mysql://localhost:3306/test2
  
 
 
 
 
  
   
    
    
   
 
  
  
  
 
 
 
 
 
  
   
  
  
  
   
    com/frogking/entity/User.hbm.xml
    com/frogking/entity/Admin.hbm.xml
   
  
  
  
   
    
     org.hibernate.dialect.MySQLDialect
    
    true
    false
    false
    2
    
     true
    
   
  
 
 
 
  
   
  
 

删除Hibernate中表的配置文件catalog,他会自动匹配数据库如果指定catalog匹配将不启用

<?xml version="1.0" encoding="utf-8"?>