当前位置: 首页 > news >正文

springboot多数据源配置

Spring Boot 支持多数据源配置,这在需要同时操作多个数据库或者需要将读写分离的应用场景中非常有用。下面我将详细介绍如何在 Spring Boot 应用程序中配置和使用多数据源。

基础概念

  • 数据源: 数据源是用于连接数据库的对象,Spring Boot 默认使用 HikariCP 作为数据源。
  • JDBC: Java Database Connectivity,用于与数据库交互的标准接口。
  • JPA/Hibernate: 用于 ORM 操作的对象关系映射框架。

添加依赖

首先,你需要在 pom.xml 文件中添加相应的依赖。这里我们假设使用 MySQL 数据库,所以需要添加 HikariCP 和 MySQL JDBC 驱动。

<dependencies><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- HikariCP 数据源 --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency><!-- MySQL JDBC 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>

配置多数据源

application.propertiesapplication.yml 文件中配置两个数据源,比如 primarysecondary

application.properties 示例:
# 主数据源
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf8
spring.datasource.primary.username=root
spring.datasource.primary.password=secret
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.hikari.maximum-pool-size=10# 从数据源
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=secret
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.hikari.maximum-pool-size=5# JPA 配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
application.yml 示例:
spring:datasource:primary:url: jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf8username: rootpassword: secretdriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10secondary:url: jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8username: rootpassword: secretdriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 5jpa:show-sql: truehibernate:ddl-auto: update

配置 DataSource Bean

在 Spring Boot 中,你可以通过 @Configuration 类来定义 DataSource Bean。下面是一个例子:

@Configuration
public class DataSourceConfig {@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

创建 Repository 和 Service

为了使用不同的数据源,你需要为每个数据源创建一个实体类、Repository 和 Service。

实体类 (Entity)
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// Getters and Setters
}
Repository (使用不同的数据源)
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}@Repository(lookup = "secondaryUserRepository")
public interface SecondaryUserRepository extends JpaRepository<User, Long> {
}
Service
@Service
public class UserService {private final UserRepository userRepository;private final SecondaryUserRepository secondaryUserRepository;public UserService(UserRepository userRepository, @Qualifier("secondaryUserRepository") SecondaryUserRepository secondaryUserRepository) {this.userRepository = userRepository;this.secondaryUserRepository = secondaryUserRepository;}public List<User> findAllPrimaryUsers() {return userRepository.findAll();}public List<User> findAllSecondaryUsers() {return secondaryUserRepository.findAll();}
}

这样就完成了基本的多数据源配置。你可以根据实际需求调整数据源的数量和配置细节。如果你需要在同一个实体上切换数据源,可能还需要配置不同的实体管理器工厂 (EntityManagerFactory) 和实体管理器 (EntityManager)。如果你需要进一步的帮助,请告诉我你具体的使用场景,我可以给出更详细的指导。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安装AURIX™ Development Studio软件,新建工程,基于英飞凌TC375
  • 使用 Elasticsearch RestHighLevelClient 进行查询
  • 【如何使用Python绘制条形图】
  • 超详解Haproxy七层代理及配置
  • 力扣45:跳跃游戏2题解
  • 小白零基础学数学建模系列-Day4-线性规划基础与案例分析
  • 漏洞复现-Cacti命令执行漏洞 (CVE-2022-46169)
  • 牛客入门刷题
  • Java设计模式七大原则
  • 开启仓颉编程
  • 网络编程:Posix API
  • windows C++-并发和异步操作(上)
  • 国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
  • 汇量科技Mintegral发布全新产品矩阵:助力广告主高效增长与变现
  • go-zero中基本配置及获取参数
  • [LeetCode] Wiggle Sort
  • go append函数以及写入
  • JavaScript服务器推送技术之 WebSocket
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Phpstorm怎样批量删除空行?
  • Promise面试题2实现异步串行执行
  • python docx文档转html页面
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 京东美团研发面经
  • 区块链将重新定义世界
  • 手机端车牌号码键盘的vue组件
  • 我有几个粽子,和一个故事
  • 物联网链路协议
  • 一份游戏开发学习路线
  • 一天一个设计模式之JS实现——适配器模式
  • 移动端高清、多屏适配方案
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #include<初见C语言之指针(5)>
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (算法设计与分析)第一章算法概述-习题
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)利用webkit抓取动态网页和链接
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net framework profiles /.net framework 配置
  • .NET 的程序集加载上下文
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.