Spring多数据源配置

Spring多数据源配置,这里持久层框架使用mybatis,集成Mybatis多数据源有两种方式:

1、创建多个SqlSessionFactory,扫描每个SqlSessionFactoryBean对应的包,形成了每个Factory对应一个数据源。

2、创建一个SqlSessionFactory,通过动态切换数据源对象,达到多数据源操作功能。

方式一:创建多个SqlSessionFactory

整合mysql+clickhouse双数据源


    
      org.mybatis
      mybatis-spring
      2.0.6
    
    
      com.alibaba
      druid
      1.1.23
    
    
      org.mybatis
      mybatis
      3.4.5
    
    
      mysql
      mysql-connector-java
      5.1.49
    
    
    
      ru.yandex.clickhouse
      clickhouse-jdbc
      0.1.53
    

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.master.url=jdbc:mysql://localhost:3306/test
jdbc.master.username=root
jdbc.master.password=root
jdbc.master.maxActive=10
jdbc.master.minIdle=5
jdbc.master.maxWait=10000

clickhouse.properties

clickhouse.driverClassName=ru.yandex.clickhouse.ClickHouseDriver
clickhouse.url=jdbc:clickhouse://localhost:8123/test
clickhouse.username=root
clickhouse.password=root
clickhouse.maxActive=10
clickhouse.minIdle=5
clickhouse.maxWait=10000

spring配置文件中配置多个数据源


    
    

    
    
        
        
        
        
        
        
        
    
    
        
        
        
        
        
            
                
                
                    
                        
                            
                            mysql
                        
                    
                
            
        
    
    
        
        
    
    
        
    
    

    
    
        
        
        
        
        
        
        
    
    
        
        
        
        
        
            
                
                
                    
                        
                            
                            mysql
                        
                    
                
            
        
    
    
        
        
    
    
        
    
    

方式二:动态切换数据源对象

创建单个SqlSessionFactory,动态切换数据源对象 ,在Spring的jdbc包下有个支持动态数据源切换的抽象类AbstractRoutingDataSource,其中的抽象方法determineCurrentLookupKey需要我们自己来实现,到底返回哪个数据源

public class DynamicDataSource extends AbstractRoutingDataSource {
 
	@Override
	protected Object determineCurrentLookupKey() {
        //在这里做数据源切换
		return DataSourceTypeManager.get();
	}
 
}
public class DataSourceTypeManager {
    //数据源保存
	private static final ThreadLocal dataSourceTypes = new ThreadLocal() {
		 
		@Override
		protected MybatisDataSource initialValue() {
			return MybatisDataSource.JKDSJ;
	}
	};
 
	public static MybatisDataSource get() {
		return dataSourceTypes.get();
	}
 
	public static void set(MybatisDataSource dataSourceType) {
		dataSourceTypes.set(dataSourceType);
	}
 
	public static void reset() {
		dataSourceTypes.set(MybatisDataSource.JKDSJ);
	}
 
}

【SpringBoot DB 系列】Mybatis 基于 AbstractRoutingDataSource 与 AOP 实现多数据源切换_一灰灰blog的博客-CSDN博客

你可能感兴趣的:(ssm,jpa,...,spring,mybatis,java)