Spring Boot使用多个数据源时如何设置多个连接池

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

Spring Boot使用多个数据源时如何设置多个连接池?

在开发过程中,我们经常需要使用多个数据源来访问不同的数据库。Spring Boot提供了方便的配置和管理多个数据源的功能。在使用多个数据源时,我们还需要为每个数据源配置独立的连接池。本文将介绍如何在Spring Boot中设置多个连接池,并提供一个案例代码来演示。

1. 配置多个数据源

首先,我们需要在Spring Boot的配置文件(application.properties或application.yml)中配置多个数据源。假设我们需要配置两个数据源,分别是primary和secondary。我们可以在配置文件中添加如下内容:

application.properties:

# primary数据源配置

spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db

spring.datasource.primary.username=root

spring.datasource.primary.password=root

spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver

# secondary数据源配置

spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db

spring.datasource.secondary.username=root

spring.datasource.secondary.password=root

spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

application.yml:

yaml

# primary数据源配置

spring:

datasource:

primary:

url: jdbc:mysql://localhost:3306/primary_db

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

# secondary数据源配置

spring:

datasource:

secondary:

url: jdbc:mysql://localhost:3306/secondary_db

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

2. 设置多个连接池

接下来,我们需要为每个数据源配置独立的连接池。在Spring Boot中,可以使用第三方连接池库,如HikariCP、Tomcat JDBC等。我们可以在配置类中创建多个数据源,并分别为它们设置独立的连接池。

java

@Configuration

public class DataSourceConfig {

// primary数据源配置

@Primary

@Bean(name = "primaryDataSource")

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

public DataSource primaryDataSource() {

return DataSourceBuilder.create().build();

}

// secondary数据源配置

@Bean(name = "secondaryDataSource")

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

public DataSource secondaryDataSource() {

return DataSourceBuilder.create().build();

}

// primary连接池配置

@Primary

@Bean(name = "primaryDataSourcePool")

public DataSourcePoolProperties primaryDataSourcePool() {

DataSourcePoolProperties properties = new DataSourcePoolProperties();

// 设置连接池属性

// ...

return properties;

}

// secondary连接池配置

@Bean(name = "secondaryDataSourcePool")

public DataSourcePoolProperties secondaryDataSourcePool() {

DataSourcePoolProperties properties = new DataSourcePoolProperties();

// 设置连接池属性

// ...

return properties;

}

}

在上述代码中,我们通过@Configuration注解将该类标记为配置类,并通过@Bean注解创建了两个数据源:primaryDataSource和secondaryDataSource。其中,@Primary注解用于标识primaryDataSource为主数据源。我们还创建了两个连接池配置类:primaryDataSourcePool和secondaryDataSourcePool。

3. 使用多个数据源和连接池

在使用多个数据源和连接池时,我们可以通过@Autowired注解将数据源和连接池注入到需要使用的地方。

java

@Service

public class UserService {

@Autowired

@Qualifier("primaryDataSource")

private DataSource primaryDataSource;

@Autowired

@Qualifier("secondaryDataSource")

private DataSource secondaryDataSource;

@Autowired

@Qualifier("primaryDataSourcePool")

private DataSourcePoolProperties primaryDataSourcePool;

@Autowired

@Qualifier("secondaryDataSourcePool")

private DataSourcePoolProperties secondaryDataSourcePool;

// ...

}

在上述代码中,我们使用@Autowired注解将primaryDataSource和secondaryDataSource注入到UserService中。我们还注入了primaryDataSourcePool和secondaryDataSourcePool,以便在需要时设置连接池属性。

通过以上步骤,我们可以在Spring Boot中设置多个数据源和连接池。首先,在配置文件中配置多个数据源,然后在配置类中创建多个数据源和连接池,并通过@Autowired注解将它们注入到需要使用的地方。这样,我们就可以方便地使用多个数据源和连接池了。

案例代码

你可以在以下链接中找到完整的案例代码:https://github.com/example/spring-boot-multiple-datasources