Spring Boot中如何配置和使用多数据源

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Spring Boot中如何配置和使用多数据源
1. 引言

在许多现代应用中,数据存储和管理往往需要使用多个数据库,每个数据库可能有不同的访问权限、数据结构或者用途。Spring Boot提供了强大的支持来配置和管理多个数据源,使得开发者能够轻松地实现多数据源的配置和使用。

2. 准备工作

在开始之前,请确保你已经安装了以下软件和组件:

  • Java开发环境
  • Spring Boot框架
3. 创建Spring Boot项目

首先,让我们创建一个基本的Spring Boot项目。假设我们的包名是cn.juwatech.multidatasourcedemo

package cn.juwatech.multidatasourcedemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MultiDataSourceDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MultiDataSourceDemoApplication.class, args);
    }
}
4. 配置多数据源

application.properties中配置多个数据源的连接信息:

# 数据源1
spring.datasource.first.url=jdbc:mysql://localhost:3306/first_db
spring.datasource.first.username=root
spring.datasource.first.password=secret
spring.datasource.first.driver-class-name=com.mysql.jdbc.Driver
# 数据源2
spring.datasource.second.url=jdbc:mysql://localhost:3306/second_db
spring.datasource.second.username=root
spring.datasource.second.password=secret
spring.datasource.second.driver-class-name=com.mysql.jdbc.Driver
5. 创建多数据源配置类

编写一个配置类,分别配置和注入多个数据源:

package cn.juwatech.multidatasourcedemo.config;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class DataSourceConfig {
    @Bean(name = "firstDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.first")
    public DataSource firstDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "secondDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }
}
6. 创建JPA Repository

为每个数据源创建对应的JPA Repository接口:

package cn.juwatech.multidatasourcedemo.repository.first;
import cn.juwatech.multidatasourcedemo.model.first.FirstEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FirstEntityRepository extends JpaRepository<FirstEntity, Long> {
}
package cn.juwatech.multidatasourcedemo.repository.second;
import cn.juwatech.multidatasourcedemo.model.second.SecondEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface SecondEntityRepository extends JpaRepository<SecondEntity, Long> {
}
7. 编写实体类

分别创建每个数据源的实体类,例如:

package cn.juwatech.multidatasourcedemo.model.first;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class FirstEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 省略Getter和Setter方法
}
package cn.juwatech.multidatasourcedemo.model.second;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class SecondEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String description;
    // 省略Getter和Setter方法
}
8. 使用多数据源

在Service层或Controller层使用@Qualifier注解指定具体的数据源:

package cn.juwatech.multidatasourcedemo.service;
import cn.juwatech.multidatasourcedemo.model.first.FirstEntity;
import cn.juwatech.multidatasourcedemo.model.second.SecondEntity;
import cn.juwatech.multidatasourcedemo.repository.first.FirstEntityRepository;
import cn.juwatech.multidatasourcedemo.repository.second.SecondEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class DataService {
    @Autowired
    @Qualifier("firstDataSource")
    private FirstEntityRepository firstRepository;
    @Autowired
    @Qualifier("secondDataSource")
    private SecondEntityRepository secondRepository;
    @Transactional(transactionManager = "firstTransactionManager")
    public void saveDataToFirstDB(FirstEntity entity) {
        firstRepository.save(entity);
    }
    @Transactional(transactionManager = "secondTransactionManager")
    public void saveDataToSecondDB(SecondEntity entity) {
        secondRepository.save(entity);
    }
}
9. 测试和部署

完成以上步骤后,可以启动Spring Boot应用程序,并测试多数据源的读写操作。确保每个数据源配置正确,并能够正常连接和操作数据库。

10. 总结

通过本文,我们详细介绍了如何在Spring Boot应用中配置和使用多数据源。从配置多个数据源的连接信息,到编写对应的Repository和实体类,再到在Service层使用@Qualifier注解指定数据源,我们逐步了解了如何处理复杂应用中的多数据源需求。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16小时前
|
Java 数据处理 Spring
Spring Boot中的模板引擎选择与配置
Spring Boot中的模板引擎选择与配置
|
18小时前
|
Java 数据库连接 数据库
Spring Boot中配置Liquibase进行数据库管理
Spring Boot中配置Liquibase进行数据库管理
|
1天前
|
Java API 网络架构
Spring Cloud Gateway的高级配置与实践
Spring Cloud Gateway的高级配置与实践
|
2天前
|
Java 应用服务中间件 Maven
ContextLoaderListener在Spring应用中的作用与配置方法
ContextLoaderListener在Spring应用中的作用与配置方法
|
3天前
|
存储 Java 开发工具
Spring Boot中的配置中心实现
Spring Boot中的配置中心实现
|
3天前
|
Java 应用服务中间件 测试技术
Spring Boot中最佳实践:数据源配置详解
Spring Boot中最佳实践:数据源配置详解
|
3天前
|
监控 安全 Java
Spring Boot中的安全性配置详解
Spring Boot中的安全性配置详解
|
3天前
|
Java UED Spring
Spring Boot中的国际化配置
Spring Boot中的国际化配置
|
3天前
|
监控 Java 开发者
Spring Boot中的热部署配置
Spring Boot中的热部署配置
|
3天前
|
Java API Spring
Spring Boot中配置Swagger用于API文档
Spring Boot中配置Swagger用于API文档