使用 Spring Boot 实现 MongoDB 和 MySQL 的多数据源配置

在现代开发中,涉及到多个数据源是很常见的情况。今天,我们将以 Spring Boot 为基础,展示如何在一个应用中集成 MongoDB 和 MySQL 两种数据源。下面的流程图展示了完整的实现步骤。

集成流程

| 步骤 | 操作              |
|------|-----------------|
| 1    | 添加依赖          |
| 2    | 配置数据源        |
| 3    | 创建模型          |
| 4    | 创建 Repository   |
| 5    | 创建 Service      |
| 6    | 创建 Controller   |
| 7    | 测试              |

详细步骤

1. 添加依赖

pom.xml 文件中添加 Spring Boot, MongoDB 和 MySQL 的依赖。

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Data JPA for MySQL -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Data MongoDB -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

2. 配置数据源

application.yml 中配置 MySQL 和 MongoDB 的相关信息。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver
  
  mongodb:
    uri: mongodb://localhost:27017/mydatabase

3. 创建模型

为 MySQL 和 MongoDB 创建实体模型。下面是一个简单的示例。

// MySQL 实体
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class UserMySQL {
    @Id
    private Long id;
    private String name;

    // getters and setters
}
// MongoDB 实体
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class UserMongoDB {
    @Id
    private String id;
    private String name;

    // getters and setters
}

4. 创建 Repository

为 MySQL 和 MongoDB 创建 Repository 接口。

// MySQL Repository
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserMySQLRepository extends JpaRepository<UserMySQL, Long> {
}
// MongoDB Repository
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserMongoDBRepository extends MongoRepository<UserMongoDB, String> {
}

5. 创建 Service

在 Service 层中实现业务逻辑。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserMySQLRepository userMySQLRepository;

    @Autowired
    private UserMongoDBRepository userMongoDBRepository;

    public void saveUserToMySQL(UserMySQL user) {
        userMySQLRepository.save(user); // 保存到 MySQL
    }

    public void saveUserToMongoDB(UserMongoDB user) {
        userMongoDBRepository.save(user); // 保存到 MongoDB
    }
}

6. 创建 Controller

暴露 REST API,以便进行数据操作。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/mysql")
    public void saveUserToMySQL(@RequestBody UserMySQL user) {
        userService.saveUserToMySQL(user);
    }

    @PostMapping("/mongodb")
    public void saveUserToMongoDB(@RequestBody UserMongoDB user) {
        userService.saveUserToMongoDB(user);
    }
}

7. 测试

可以使用 Postman 或者其他 API 测试工具分别向 /users/mysql/users/mongodb 发送 POST 请求进行测试。

状态图

下面是系统状态图,展示 MongoDB 和 MySQL 的交互过程。

stateDiagram
    [*] --> MySQL_Database
    [*] --> MongoDB_Database
    MySQL_Database --> Save_User
    MongoDB_Database --> Save_User
    Save_User --> [*]

结尾

通过上面的步骤和代码,实现了一个同时操作 MongoDB 和 MySQL 的 Spring Boot 应用。这种多数据源的整合对于许多企业级应用程序都是非常有用的,允许您根据不同的数据存储需求进行灵活的配置和使用。希望通过这篇文章,您能够掌握如何在 Spring Boot 中配置和使用多数据源的基本技巧。继续探索更复杂的功能与特性,提升您的开发能力!