添加多数据源

master
luyya 2024-07-15 15:39:29 +08:00
parent d3807cbb89
commit 1603507d32
3 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,69 @@
package basepro.manager.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DataSourceConfig {
/**
* 1
* spring.datasource.db1application.properteis
* @return
*/
@Bean(name = "db1")
@ConfigurationProperties(prefix = "spring.datasource.druid.db1")
public DataSource dataSourceOne() {
return DataSourceBuilder.create().build();
}
/**
* 2
* spring.datasource.db2application.properteis
* @return
*/
@Bean(name = "db2")
@ConfigurationProperties(prefix = "spring.datasource.druid.db2")
public DataSource dataSourceTwo() {
return DataSourceBuilder.create().build();
}
/**
* : AOP
* @return
*/
@Primary
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
// 默认数据源
dynamicDataSource.setDefaultTargetDataSource(dataSourceOne());
// 配置多数据源
Map<Object, Object> dsMap = new HashMap<>();
dsMap.put("db1", dataSourceOne());
dsMap.put("db2", dataSourceTwo());
dynamicDataSource.setTargetDataSources(dsMap);
return dynamicDataSource;
}
/**
* IOC
* dynamicDataSource
* @Transactional
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dynamicDataSource());
}
}

View File

@ -0,0 +1,40 @@
package basepro.manager.config;
/**
*
* @date 2022/5/19
*/
public class DataSourceUtil {
/**
*
*/
public static final String DEFAULT_DS = "db1";
/**
*
* ThreadLocal线线
*/
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
/**
*
* @param dbType
*/
public static void setDB(String dbType) {
contextHolder.set(dbType);
}
/**
*
* @return
*/
public static String getDB() {
return (contextHolder.get());
}
/**
*
*/
public static void clearDB() {
contextHolder.remove();
}
}

View File

@ -0,0 +1,13 @@
package basepro.manager.config;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
*
* @date 2022/2/11
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceUtil.getDB();
}
}