1. 为什么需要双数据源配置?
在实际开发中,我们经常会遇到需要同时使用多个数据库的场景。比如公司原本使用的是MySQL数据库,后来引入了新的业务系统使用的是PostgreSQL;或者某些业务模块对事务要求高适合用MySQL,而分析型业务更适合PostgreSQL的JSON类型和地理空间支持。我最近就遇到了这样一个真实案例:一个电商系统需要同时对接老订单系统(MySQL)和新物流系统(PostgreSQL)。
若依(RuoYi)作为基于SpringBoot的快速开发框架,默认只配置了单数据源。但通过一些改造,我们可以让它支持多数据源自由切换。这样做的好处很明显:不同业务模块可以使用最适合的数据库,老系统迁移可以分模块逐步进行,新功能开发不受旧数据库限制。不过要注意的是,多数据源也会带来事务管理复杂化的问题,这个我们后面会详细讨论。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖配置
2.1 数据库驱动引入
首先需要在pom.xml中添加PostgreSQL的JDBC驱动。这里有个小细节要注意:MySQL驱动通常SpringBoot已经通过spring-boot-starter-jdbc引入了,但PostgreSQL的需要手动添加。我推荐使用最新稳定版,比如目前是42.6.0。
xml复制<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
有个坑我踩过:如果同时使用MyBatis-Plus,要注意它的版本与PostgreSQL驱动的兼容性。曾经有个项目因为用了老版本驱动导致JSONB类型字段映射出错,折腾了好久才发现是驱动版本问题。
2.2 数据库连接池配置
若依默认使用Druid连接池,我们需要在application-druid.yml中配置第二个数据源。这里分享一个实用技巧:建议给不同数据源配置不同的连接池前缀,方便监控时区分。
yaml复制spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 主库(MySQL)配置
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry?useSSL=false
username: root
password: 123456
initialSize: 5
maxActive: 20
# 从库(Po
