数据库 · 31 10 月, 2024

SpringBoot整合Mybatis-Plus多數據源

SpringBoot整合Mybatis-Plus多數據源

在當今的軟體開發中,使用多數據源的架構已成為一種常見的需求。尤其是在微服務架構中,應用程序可能需要從不同的數據庫中讀取和寫入數據。本文將探討如何在SpringBoot中整合Mybatis-Plus以支持多數據源的配置和使用。

什麼是Mybatis-Plus?

Mybatis-Plus是一個基於Mybatis的增強工具,旨在簡化Mybatis的使用。它提供了許多便捷的功能,如自動生成SQL語句、簡化CRUD操作等。這使得開發者能夠更專注於業務邏輯,而不是繁瑣的數據訪問層代碼。

為什麼需要多數據源?

在某些情況下,應用程序可能需要同時訪問多個數據庫。例如,企業可能會將不同的業務模塊分開存儲在不同的數據庫中,或者在遷移數據時需要同時訪問舊數據庫和新數據庫。這時,配置多數據源就顯得尤為重要。

SpringBoot中配置多數據源

在SpringBoot中配置多數據源主要涉及以下幾個步驟:

1. 添加依賴



    com.baomidou
    mybatis-plus-boot-starter
    3.4.3


    org.springframework.boot
    spring-boot-starter-data-jpa


    mysql
    mysql-connector-java
    runtime

2. 配置數據源

在application.yml中配置多個數據源:


spring:
  datasource:
    first:
      url: jdbc:mysql://localhost:3306/first_db
      username: root
      password: password
      driver-class-name: com.mysql.cj.jdbc.Driver
    second:
      url: jdbc:mysql://localhost:3306/second_db
      username: root
      password: password
      driver-class-name: com.mysql.cj.jdbc.Driver

3. 創建數據源配置類

接下來,我們需要創建數據源配置類來管理這些數據源:


import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.mybatis.MyBatisSqlSessionFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean(name = "firstDataSource")
    @ConfigurationProperties("spring.datasource.first")
    public DataSource firstDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondDataSource")
    @ConfigurationProperties("spring.datasource.second")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "firstSqlSessionFactory")
    public SqlSessionFactory firstSqlSessionFactory(@Qualifier("firstDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/first/*.xml"));
        return sessionFactory.getObject();
    }

    @Bean(name = "secondSqlSessionFactory")
    public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/second/*.xml"));
        return sessionFactory.getObject();
    }

    @Bean(name = "firstTransactionManager")
    public PlatformTransactionManager firstTransactionManager(@Qualifier("firstDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "secondTransactionManager")
    public PlatformTransactionManager secondTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

4. 使用Mybatis-Plus進行數據操作

在完成數據源的配置後,我們可以使用Mybatis-Plus進行數據操作。以下是一個簡單的示例:


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper {
}

然後在服務層中,我們可以根據需要選擇使用不同的數據源進行操作。

總結

整合Mybatis-Plus以支持多數據源的配置可以顯著提高應用程序的靈活性和可擴展性。通過上述步驟,我們可以輕鬆地在SpringBoot中實現多數據源的管理和使用。這對於需要同時訪問多個數據庫的應用程序來說,無疑是一個強大的解決方案。

如果您正在尋找高效的 VPS 解決方案來部署您的SpringBoot應用,Server.HK提供了多種選擇,滿足您的需求。