多数据源配置文件修改
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
datasource.running.databaseName=数据名1
datasource.his.databaseName=数据名2
spring.datasource.druid.running.url=jdbc:mysql://127.0.0.1:3306/${datasource.running.databaseName}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/${datasource.databaseName}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true&serverTimezone=UTC
spring.datasource.druid.running.username=账号
spring.datasource.druid.running.password=密码
spring.datasource.druid.running.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.running.max-idle=10
spring.datasource.druid.running.max-wait=10000
spring.datasource.druid.running.min-idle=5
spring.datasource.druid.running.initial-size=5
spring.datasource.druid.his.url=jdbc:mysql://127.0.0.1:3306/${datasource.his.databaseName}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/${datasource.databaseName}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true&serverTimezone=UTC
spring.datasource.druid.his.username=账号
spring.datasource.druid.his.password=密码
spring.datasource.druid.his.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.his.max-idle=10
spring.datasource.druid.his.max-wait=10000
spring.datasource.druid.his.min-idle=5
spring.datasource.druid.his.initial-size=5
数据源切换工具类
package com.samples.common.config;
/**
* 数据源切换工具类
*/
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal<String>();
/**
* 设置数据源
*
* @param dbTypeEnum
*/
public static void setDbType(DBTypeEnum dbTypeEnum) {
contextHolder.set(dbTypeEnum.getValue());
}
/**
* 取得当前数据源
*
* @return
*/
public static String getDbType() {
return (String) contextHolder.get();
}
/**
* 清除上下文数据
*/
public static void clearDbType() {
contextHolder.remove();
}
}
多个数据库的枚举
package com.samples.common.config;
public enum DBTypeEnum {
running("running"), his("his");
private String value;
DBTypeEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
comfig类修改
@EnableTransactionManagement
@Configuration
@MapperScan({"com.samples.web.mapper"})
public class MybatisPlusConfig {
@Bean(name = "his")
@ConfigurationProperties(prefix = "spring.datasource.druid.his")
public DataSource his() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "running")
@ConfigurationProperties(prefix = "spring.datasource.druid.running")
public DataSource running() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public DataSource multipleDataSource(@Qualifier("running") DataSource running,
@Qualifier("his") DataSource his) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DBTypeEnum.running.getValue(), running);
targetDataSources.put(DBTypeEnum.his.getValue(), his);
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(running);
return dynamicDataSource;
}
}
@Slf4j
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
String datasource = DataSourceContextHolder.getDbType();
return datasource;
}
}