springboot 设置多数据源
首先引入baomidou的datasourcejar
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.1</version>
</dependency>
在项目的配置文件(例如 application.yml)中,配置多个数据源的连接信息。例如:
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/db1
username: root
password: password
secondary:
url: jdbc:mysql://localhost:3306/db2
username: root
password: password
在项目中定义多个 DataSource 实例,对应每一个数据源。例如:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
在 MyBatis-Plus 的配置类(例如 MybatisPlusConfig)中,通过 @Qualifier 注解指定每一个数据源对应的 DataSource 实例。例如:
@Configuration
@MapperScan(basePackages = {"com.example.mapper"})
public class MybatisPlusConfig {
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource)
throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
@Bean
public MybatisSqlSessionFactoryBean secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource)
throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
在 Mapper 接口中使用 @DS 注解来指定操作哪个数据源。例如:
@DS("primary")
public interface UserMapper extends BaseMapper<User> {
}
@DS("secondary")
public interface LogMapper extends BaseMapper<Log> {
}