spring-boot多資料來源配置
阿新 • • 發佈:2021-01-25
spring-boot多資料來源配置
在config中配置兩個資料來源,配置@MapperScan
掃描不同的包
// ConfigDB1
@Configuration
@MapperScan(value = "com.alex.demo.db1.dao",sqlSessionFactoryRef = "db1SqlSessionFactoryBean")
public class ConfigDB1 {
@Primary // 表示這個資料來源是預設資料來源, 這個註解必須要加,因為不加的話spring將分不清楚那個為主資料來源(預設資料來源)
@Bean ("db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1") //讀取application.yml中的配置引數對映成為一個物件
public DataSource db1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean("db1SqlSessionFactoryBean")
public SqlSessionFactoryBean sqlSessionFactoryBean (@Qualifier("db1DataSource") DataSource dataSource) throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver ();
sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db1/*.xml"));
return sqlSessionFactoryBean;
}
}
// ConfigDB2
@Configuration
@MapperScan(value = "com.alex.demo.db2.dao",sqlSessionFactoryRef = "db2SqlSessionFactoryBean")
public class ConfigDB2 {
@Bean("db2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2") //讀取application.yml中的配置引數對映成為一個物件
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean("db2SqlSessionFactoryBean")
public SqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("db2DataSource") DataSource dataSource) throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db2/*.xml"));
return sqlSessionFactoryBean;
}
}
在spring.properties中新增配置引數
spring:
datasource:
db1: # 資料來源1
jdbc-url: jdbc:mysql://localhost:3310/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
db2: # 資料來源2
jdbc-url: jdbc:mysql://localhost:3320/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
配置好後注入不同的Mapper代表不同的資料來源
@Service
public class XAService {
@Resource
private XADB1Mapper XADB1Mapper;
@Resource
private XADB2Mapper XADB2Mapper;
public void testXA() {
XADB1 XADB1 = new XADB1();
XADB1.setId(2);
XADB1.setName("xa_db1");
XADB1Mapper.insert(XADB1);
XADB2 XADB2 = new XADB2();
XADB2.setId(2);
XADB2.setName("xa_db2");
XADB2Mapper.insert(XADB2);
}
}
原始碼地址 https://gitee.com/kakalex/multiDataSourceDemo