Spring Boot整合Mybatis-Plus Druid实现多数据源

星辰坠落 2024-06-17 ⋅ 115 阅读

背景介绍

在使用Spring Boot进行开发的过程中,我们通常会遇到多数据源的需求。比如,一个系统需要同时连接多个数据库进行读写操作,或者需要连接不同的数据库进行分库分表。本文将介绍如何使用Spring Boot整合Mybatis-Plus和Druid,实现多数据源的配置和使用。

步骤一:添加依赖

首先,我们需要在pom.xml文件中添加以下依赖:

<dependencies>
    ...
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.0</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.6</version>
    </dependency>
    ...
</dependencies>

步骤二:配置数据源

application.yml中配置数据源信息:

spring:
  datasource:
    druid:
      default:
        url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
      db2:
        url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver

步骤三:配置多数据源

config包下创建一个DataSourceConfig类,配置多数据源:

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource.druid.default")
    public DataSource dataSource1() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.druid.db2")
    public DataSource dataSource2() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    public DataSourceRouting dataSourceRouting(@Qualifier("dataSource1") DataSource dataSource1,
                                               @Qualifier("dataSource2") DataSource dataSource2) {
        DataSourceRouting dataSourceRouting = new DataSourceRouting();
        Map<Object, Object> dataSourceMap = new HashMap<>();
        dataSourceMap.put("dataSource1", dataSource1);
        dataSourceMap.put("dataSource2", dataSource2);
        dataSourceRouting.setTargetDataSources(dataSourceMap);
        dataSourceRouting.setDefaultTargetDataSource(dataSource1);
        return dataSourceRouting;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSourceRouting dataSourceRouting) throws Exception {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSourceRouting);
        return factoryBean.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSourceRouting dataSourceRouting) {
        return new DataSourceTransactionManager(dataSourceRouting);
    }
}

步骤四:编写Mapper和Service

在使用Mybatis-Plus进行操作数据库时,需要编写Mapper和Service。这里以两个数据源为例,分别创建两个包com.example.mappercom.example.service用于存放不同数据源的Mapper和Service接口。

com.example.mapper中创建Db1MapperDb2Mapper接口,并使用@Mapper注解进行标记:

@Mapper
public interface Db1Mapper extends BaseMapper<Db1Entity> {

}

@Mapper
public interface Db2Mapper extends BaseMapper<Db2Entity> {

}

com.example.service中创建Db1ServiceDb2Service接口:

public interface Db1Service extends IService<Db1Entity> {

}

public interface Db2Service extends IService<Db2Entity> {

}

步骤五:使用多数据源

在需要使用数据源的地方,通过注解的方式指定要使用的数据源。例如,在Service实现类中:

@Service
public class Db1ServiceImpl extends ServiceImpl<Db1Mapper, Db1Entity> implements Db1Service {

    @Override
    @DataSource("dataSource1")
    public List<Db1Entity> getDb1Data() {
        return baseMapper.selectList(null);
    }
}

@Service
public class Db2ServiceImpl extends ServiceImpl<Db2Mapper, Db2Entity> implements Db2Service {

    @Override
    @DataSource("dataSource2")
    public List<Db2Entity> getDb2Data() {
        return baseMapper.selectList(null);
    }
}

通过@DataSource注解指定要使用的数据源名称,即@Bean(name = "dataSource1")@Bean(name = "dataSource2")中定义的名称。

步骤六:测试多数据源

编写测试类进行多数据源的测试:

@SpringBootTest
class MultiDataSourceTest {

    @Autowired
    private Db1Service db1Service;

    @Autowired
    private Db2Service db2Service;

    @Test
    void testMultiDataSource() {
        List<Db1Entity> db1Data = db1Service.getDb1Data();
        List<Db2Entity> db2Data = db2Service.getDb2Data();

        // 进行数据操作和断言
    }
}

运行测试类,验证多数据源是否配置成功。

结语

本文介绍了如何使用Spring Boot整合Mybatis-Plus和Druid实现多数据源的配置和使用。通过配置不同的数据源,并使用注解的方式指定要使用的数据源,可以方便地实现多数据源的操作。希望该文章对你有所帮助!


全部评论: 0

    我有话说: