- 首先引入pom,包括mybatis-starter以及动态数据源
<!--- mybatis starter --->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 动态数据源 --->
<dependency>
<groupId>com.baoidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
- 定义数据源
2.1 数据源配置类
/**
* 主数据源配置
*/
@Configuration
@MapperScan(basePackages = {"com.test1.repository"}, sqlSessionTemplateRef="test1SqlSessionTemplate")
public class DataSourceTest1Config {
@Primary
@Bean(name = "test1Datasource")
@ConfigurationProperties(prefix="spring.datasource.test1")
public DataSouce dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name= "test1SqlSessionFactory")
public SqlSessionFactory sqlSessionnFactory(@Qualifier("test1Datasource") DataSource dataSource) {
MybatisSqlSessionFactoryBean beann = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver("classpath*:mappers/*_test1.xml"));
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
bean.setPlugins(interceptor);
return bean.getObject();
}
@Primary
@Bean(name="test1TrannsactionManager")
public DataSourceTransactionManager test1TransactionManager(@Qualifier("test1Datasource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name="test1SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionnFactory) {
return new SqlSessionTemplate(sqlSessionnFactory);
}
@Primary
@Bean
public DataSourceInitializer dataSourceInitializer(@Qualifier("test1Datasource") DataSource dataSource) {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
DataSourceInitializer initial = new DataSourceInitializer();
initial.setDataSource(dataSource);
initial.setDatabasePopulator(resourceDatabasePopulator);
}
}
/**
* slave数据源配置
*/
@Configuration
@MapperScan(basePackages = {"com.test2.repository"}, sqlSessionTemplateRef="test2SqlSessionTemplate")
public class DataSourceTest1Config {
@Bean(name = "test2Datasource")
@ConfigurationProperties(prefix="spring.datasource.test2")
public DataSouce dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name= "test2SqlSessionFactory")
public SqlSessionFactory sqlSessionnFactory(@Qualifier("test2Datasource") DataSource dataSource) {
MybatisSqlSessionFactoryBean beann = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver("classpath*:mappers/*_test1.xml"));
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
bean.setPlugins(interceptor);
return bean.getObject();
}
@Bean(name="test2TrannsactionManager")
public DataSourceTransactionManager test1TransactionManager(@Qualifier("test2Datasource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="test2SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionnFactory) {
return new SqlSessionTemplate(sqlSessionnFactory);
}
}
2.2 spring参数配置
spring.datasource.test1.username=
spring.datasource.test1.password=
spring.datasource.test1.jdbc-url=
spring.datasource.test1.driver-class-name=
....
spring.datasource.test2.username=
spring.datasource.test2.password=
spring.datasource.test2.jdbc-url=
spring.datasource.test2.driver-class-name=
....
- 项目结构
|--test
|---src
|----main
|-----java
|-------com
|---------test1
|----------repository
|---------test2
|----------repository