多数据源配置2

  1. 新建数据库枚举,方便辨识
  2. Mybatis配置
@Getter
@AllArgsConstructor
public enum DbSourceEnum {
   
/**
     *
新加坡节点数据库
    
*/
   
DATA_SOURCE_SG("sqlDataSourceSg","新加坡节点数据库"),
    /**
     *
德国节点数据库
    
*/
   
DATA_SOURCE_DE("sqlDataSourceDe","德国节点数据库");

    public final String key;

    public final String desc;
}
@Configuration
@EnableAutoConfiguration
public class MybatisPlusConfig {

  
@Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor() {
     
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER));
      return interceptor;
   }


  
/**
    *
新加坡节点数据源
   
* @return 数据源
   
*/
  
@Bean(name = "sqlDataSourceSg")
  
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.sqlserver-sg")
  
public DataSource sqlDataSourceSg() {
     
return DataSourceBuilder.create().build();
   }

  
/**
    *
德国节点数据源
   
* @return 数据源
   
*/
  
@Bean(name = "sqlDataSourceDe")
  
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.sqlserver-de")
  
public DataSource sqlDataSourceDe() {
     
return DataSourceBuilder.create().build();
   }

  
/**
    *
动态数据源配置
   
*
    * @return
数据源
   
*/
  
@Bean
   @Primary
   public DataSource multipleDataSource(@Qualifier("sqlDataSourceSg") DataSource sqlDataSourceSg,
                               @Qualifier("sqlDataSourceDe") DataSource sqlDataSourceDe) {
     
DynamicDataSource dynamicDataSource = new DynamicDataSource();
      Map<Object, Object> targetDataSources = new HashMap<>();
      targetDataSources.put(DbSourceEnum.DATA_SOURCE_SG.getKey(), sqlDataSourceSg);
      targetDataSources.put(DbSourceEnum.DATA_SOURCE_DE.getKey(), sqlDataSourceDe);
      dynamicDataSource.setTargetDataSources(targetDataSources);
      // 程序默认数据源,这个要根据程序调用数据源频次,经常把常调用的数据源作为默认
      dynamicDataSource.setDefaultTargetDataSource(sqlDataSourceSg);
      return dynamicDataSource;
   }

  
/**
    *
配置工厂
   
* @return 配置相关
   
* @throws Exception 异常
   
*/
  
@Bean(name = "sqlSessionFactory")
  
@ConfigurationProperties(prefix = "mybatis-plus")
  
public SqlSessionFactory sqlSessionFactory() throws Exception {
     
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
      sqlSessionFactory.setDataSource((multipleDataSource(sqlDataSourceSg(), sqlDataSourceDe())));
      MybatisConfiguration configuration = new MybatisConfiguration();
      configuration.setJdbcTypeForNull(JdbcType.NULL);
      configuration.setMapUnderscoreToCamelCase(true);
      configuration.setCacheEnabled(false);
      sqlSessionFactory.setConfiguration(configuration);
      sqlSessionFactory.setPlugins(mybatisPlusInterceptor());
      return sqlSessionFactory.getObject();
   }

  
@Bean
   public SqlSessionTemplate sqlSessionTemplate() throws Exception {
     
return new SqlSessionTemplate(sqlSessionFactory());
   }
}
posted @ 2021-11-07 21:09  yydssc  阅读(20)  评论(0)    收藏  举报