- 新建数据库枚举,方便辨识
- 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());
}
}