数据库 · 31 10 月, 2024

Spring進階:三步搞定MybatisPlus多數據源,詳細配置及原理解析

Spring進階:三步搞定MybatisPlus多數據源,詳細配置及原理解析

在當今的軟體開發中,數據源的管理變得越來越重要。尤其是在微服務架構中,應用程序可能需要連接多個數據庫。MybatisPlus作為一個強大的ORM框架,提供了簡化數據操作的功能。本文將介紹如何在Spring中配置MybatisPlus以支持多數據源,並解析其背後的原理。

第一步:添加依賴

首先,確保你的項目中已經添加了MybatisPlus和Spring Boot的相關依賴。在你的pom.xml中添加以下依賴:



    com.baomidou
    mybatis-plus-boot-starter
    3.4.3


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


    mysql
    mysql-connector-java
    runtime

第二步:配置數據源

接下來,我們需要在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

在這裡,我們定義了兩個數據源:first和second。接下來,我們需要創建數據源的配置類。

數據源配置類

創建一個配置類來管理這些數據源:


import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
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.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean(name = "firstDataSource")
    @Primary
    @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 = "firstTransactionManager")
    @Primary
    public DataSourceTransactionManager firstTransactionManager(@Qualifier("firstDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

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

第三步:使用MybatisPlus進行數據操作

在配置好數據源後,我們可以使用MybatisPlus進行數據操作。以下是一個簡單的示例,展示如何在不同的數據源上執行查詢:


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper; // 假設這是你的Mapper接口

    public User getUserFromFirstDataSource(Long id) {
        return userMapper.selectById(id);
    }

    public User getUserFromSecondDataSource(Long id) {
        // 這裡需要使用不同的Mapper或配置來操作第二數據源
        return userMapper.selectById(id);
    }
}

原理解析

MybatisPlus支持多數據源的原理主要依賴於Spring的AbstractRoutingDataSource。通過重寫determineCurrentLookupKey方法,我們可以根據當前的上下文來決定使用哪個數據源。這樣的設計使得在運行時可以靈活地切換數據源,滿足不同的業務需求。

總結

通過以上三個步驟,我們可以在Spring中成功配置MybatisPlus以支持多數據源。這不僅提高了數據操作的靈活性,也為微服務架構中的數據管理提供了便利。如果你正在尋找穩定的香港VPS來部署你的應用,Server.HK提供了多種選擇,幫助你輕鬆管理你的數據源和應用程序。