Spring Boot 多数据源

作者:编程家 分类: spring 时间:2025-11-12

使用Spring Boot实现多数据源

在开发中,我们经常会遇到需要操作多个数据库的情况,比如一个系统需要同时访问用户数据库和订单数据库。而Spring Boot提供了非常方便的方式来实现多数据源的操作。本文将介绍如何在Spring Boot中配置和使用多数据源,并提供一个简单的示例代码。

配置多数据源

首先,我们需要在application.properties文件中配置多个数据源的连接信息。假设我们有两个数据源,一个是用户数据库,另一个是订单数据库。我们可以按照以下方式进行配置:

# 用户数据库配置

spring.datasource.user.url=jdbc:mysql://localhost:3306/userdb

spring.datasource.user.username=root

spring.datasource.user.password=123456

# 订单数据库配置

spring.datasource.order.url=jdbc:mysql://localhost:3306/orderdb

spring.datasource.order.username=root

spring.datasource.order.password=123456

在配置文件中,我们使用了不同的前缀来区分不同的数据源,比如"user"和"order"。接下来,我们需要在代码中定义这些数据源。

定义数据源和事务管理器

在Spring Boot中,我们可以使用@Configuration注解来定义数据源和事务管理器。我们创建一个名为DataSourceConfig的类,并使用@Bean注解来定义数据源:

java

@Configuration

public class DataSourceConfig {

@Primary

@Bean(name = "userDataSource")

@ConfigurationProperties(prefix = "spring.datasource.user")

public DataSource userDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "orderDataSource")

@ConfigurationProperties(prefix = "spring.datasource.order")

public DataSource orderDataSource() {

return DataSourceBuilder.create().build();

}

}

在上述代码中,我们使用了@ConfigurationProperties注解来绑定配置文件中的数据源属性,并使用@Primary注解来标识默认的数据源。

接下来,我们需要定义事务管理器。我们可以使用@EnableTransactionManagement注解来启用事务管理功能,并使用@Bean注解来定义事务管理器:

java

@Configuration

@EnableTransactionManagement

public class TransactionConfig {

@Autowired

@Qualifier("userDataSource")

private DataSource userDataSource;

@Autowired

@Qualifier("orderDataSource")

private DataSource orderDataSource;

@Primary

@Bean(name = "userTransactionManager")

public PlatformTransactionManager userTransactionManager() {

return new DataSourceTransactionManager(userDataSource);

}

@Bean(name = "orderTransactionManager")

public PlatformTransactionManager orderTransactionManager() {

return new DataSourceTransactionManager(orderDataSource);

}

}

在上述代码中,我们使用@Qualifier注解来指定数据源,并使用@Bean注解来定义事务管理器。

使用多数据源

配置和定义数据源和事务管理器完成后,我们可以在代码中使用这些数据源了。假设我们有一个UserService和一个OrderService,分别对应用户数据库和订单数据库的操作。我们可以在这些服务类中使用@Qualifier注解来指定使用的数据源:

java

@Service

public class UserService {

@Autowired

@Qualifier("userDataSource")

private DataSource dataSource;

// 用户数据库的操作方法

}

java

@Service

public class OrderService {

@Autowired

@Qualifier("orderDataSource")

private DataSource dataSource;

// 订单数据库的操作方法

}

在上述代码中,我们使用@Qualifier注解来指定使用的数据源,这样我们就可以在服务类中使用对应的数据源了。

示例代码

下面是一个简单的示例代码,演示了如何在Spring Boot中使用多数据源:

java

@RestController

public class UserController {

@Autowired

private UserService userService;

@Autowired

private OrderService orderService;

@GetMapping("/users")

public List getUsers() {

return userService.getUsers();

}

@GetMapping("/orders")

public List getOrders() {

return orderService.getOrders();

}

}

在上述代码中,我们定义了一个名为UserController的控制器类,其中注入了UserService和OrderService。我们可以通过访问"/users"和"/orders"接口来获取用户和订单数据。

通过Spring Boot,我们可以方便地配置和使用多数据源。本文介绍了如何在Spring Boot中配置多数据源,并提供了一个简单的示例代码。使用多数据源可以帮助我们更好地管理和操作多个数据库,提高系统的灵活性和性能。希望本文对你理解和使用Spring Boot多数据源有所帮助。