Spring Boot 配置双数据源(MySQL 和 SQL Server)指南

在现代应用开发中,使用多个数据源是非常常见的需求。本文将指导你如何在 Spring Boot 中配置 MySQL 和 SQL Server 的双数据源。整个流程可以分为几个主要步骤,如下表所示:

步骤 描述
1 添加依赖
2 配置数据源
3 创建实体类和仓库
4 编写服务类
5 测试数据源

接下来,我们将逐步介绍每个步骤以及所需的代码。

流程图

flowchart TD
    A[添加依赖] --> B[配置数据源]
    B --> C[创建实体类和仓库]
    C --> D[编写服务类]
    D --> E[测试数据源]

1. 添加依赖

首先,确保你的 pom.xml 文件中包含 MySQL 和 SQL Server 的依赖。在 Spring Boot 项目中,这些依赖可以通过以下代码来引入:

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

    <!-- SQL Server Connector -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
  • 这里的依赖中,spring-boot-starter-data-jpa 是 JPA 的启动器,mysql-connector-javamssql-jdbc 是分别用于 MySQL 和 SQL Server 的 JDBC 驱动。

2. 配置数据源

application.properties 文件中,配置两个数据源。以下是一个示例配置:

# MySQL 数据源配置
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.mysql.username=root
spring.datasource.mysql.password=password
spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver

# SQL Server 数据源配置
spring.datasource.sqlserver.url=jdbc:sqlserver://localhost:1433;databaseName=mydb
spring.datasource.sqlserver.username=sa
spring.datasource.sqlserver.password=password
spring.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  • 以上配置包括数据库的访问 URL、用户名和密码等信息,确保根据实际情况进行修改。

3. 创建实体类和仓库

接下来,我们分别为 MySQL 和 SQL Server 创建实体类及其对应的 JPA 仓库。

MySQL 实体及仓库示例

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getter 和 Setter 方法
}

// MySQL 用户仓库
public interface UserRepository extends JpaRepository<User, Long> {
}
  • 这个实体类映射到 MySQL 的 user 表。

SQL Server 实体及仓库示例

@Entity
@Table(name = "employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getter 和 Setter 方法
}

// SQL Server 员工仓库
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
  • 该实体类映射到 SQL Server 的 employee 表。

4. 编写服务类

现在,接下来我们需要创建服务类来调用这两个数据源。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User saveUser(User user) {
        return userRepository.save(user);
    }
}

@Service
public class EmployeeService {
    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }
}
  • UserServiceEmployeeService 类分别用于处理 MySQL 和 SQL Server 的数据操作。

5. 测试数据源

最后,我们需要测试这两个数据源是否正确工作。可以创建一个简单的控制器来进行测试。

@RestController
@RequestMapping("/api")
public class TestController {
    @Autowired
    private UserService userService;

    @Autowired
    private EmployeeService employeeService;

    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        return ResponseEntity.ok(userService.saveUser(user));
    }

    @PostMapping("/employees")
    public ResponseEntity<Employee> createEmployee(@RequestBody Employee employee) {
        return ResponseEntity.ok(employeeService.saveEmployee(employee));
    }
}
  • 这个控制器提供了两个简单的 API 接口,用于分别保存用户和员工。

结尾

通过上述步骤,你已经成功地配置了 Spring Boot 项目使用双数据源:MySQL 和 SQL Server。可以通过 Postman 等 API 测试工具来验证数据的存取情况。如果你在实现过程中遇到问题,请确保所有配置都正确无误,并参考相关的文档和社区资源。实践是最好的老师,相信随着时间的推移,你会在双数据源的使用上变得更加熟练!