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

Spring Boot 双数据源配置

文章目录

    • 什么是双数据源?
    • 为什么需要双数据源?
    • 核心实现原理
    • 完整示例
    • 注意

什么是双数据源?

双数据源是指在一个应用程序中同时配置和使用两个不同的数据库连接。比如:

  • 一个连接订单数据库,处理业务数据
  • 一个连接用户中心数据库,处理用户信息

这样的架构设计可以实现数据隔离、业务分离,提升系统的可维护性和扩展性。

实现原理基于 AbstractRoutingDataSource 动态切换。

为什么需要双数据源?

1. 业务分离
不同的业务模块使用独立的数据库,职责更加明确:

订单系统 → 订单数据库(存储订单、商品、支付信息)
用户系统 → 用户数据库(存储用户、权限、组织信息)

2. 性能优化

  • 分散数据库负载,避免单点压力
  • 可以针对不同业务特点优化数据库配置

3. 数据安全

  • 敏感数据隔离存储
  • 不同数据源可以设置不同的访问权限

核心实现原理

双数据源的核心是 Spring 的 AbstractRoutingDataSource(用于动态切换数据源),它可以根据某个键值动态选择不同的数据源:

Spring 每次访问数据库前,都会先执行 determineCurrentLookupKey方法 来判断用哪个数据源。我们通过 AOP 切面,在执行方法前设置好对应的数据源,就能实现动态切换。

配置好双数据源后,访问另一个数据库的方式和访问本地数据库几乎一样,开发时感知不到差异。

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {// 返回当前线程需要使用的数据源标识return DataSourceContextHolder.getDataSourceType();}
}

完整示例

https://github.com/yikousu/DataSwitch

注意

普通的 @Transactional 注解无法跨数据源生效!

解决方案:

  • 推荐:同一业务尽量只操作一个数据源

  • 如必须跨库:考虑使用分布式事务框架

http://www.dtcms.com/a/278402.html

相关文章:

  • 基于Python的物联网岗位爬取与可视化系统的设计与实现【海量数据、全网岗位可换】
  • java基础(day07)
  • java基础-1 : 运算符
  • 如何连接 AWS RDS 数据库实例
  • Spark 和 Hadoop MapReduce 的基本概念及区别
  • 2D和3D激光slam的点云去运动畸变
  • autoware激光雷达和相机标定
  • 0-1搭建springboot+vue的教务管理系统(核心源码)
  • 第一次接触自动化监测,需要付费厂家安装服务吗?比人工测量主要区别是啥?
  • 使用 pytest 测试框架构建自动化测试套件之一
  • 各种开发语言主要语法对比
  • Linux:1_Linux下基本指令
  • 【数据结构】基于顺序表的通讯录实现
  • c#进阶之数据结构(动态数组篇)----Queue
  • 基于R语言的极值统计学及其在相关领域中的实践技术应用
  • Android ---【CPU优化】需要优化的原因及优化的地方
  • [Nagios Core] 通知系统 | 事件代理 | NEB模块,事件,回调
  • 如何将 iPhone 备份到云端:完整指南
  • Kafka事务消息与Exactly-Once语义实战指南
  • LeetCode 424.替换后的最长重复字符
  • 群晖Nas - Docker(ContainerManager)上安装SVN Server和库权限设置问题
  • 力扣 hot100 Day44
  • 【第六节】docker可视化工具portainer安装
  • 【小白量化智能体】应用5:编写通达信股票交易指标及生成QMT自动交易Python策略程序
  • VR全景制作流程?什么是全景?
  • 从欧洲杯初现到世俱杯之巅:海信冰箱的“保鲜传奇”
  • 从零构建搜索引擎 build demo search engine from scratch
  • Javaweb使用websocket,请先连上demo好吧!很简单的!
  • Android系统的问题分析笔记 - Android上的调试方式 bugreport
  • Android展示加载PDF