Spring Boot,dynamic-datasource整合多数据源配置指南,以Mysql和达梦(DM)为例
Spring Boot整合多数据源配置指南,这里以Mysql和达梦(DM)为例
·
Spring Boot,dynamic-datasource整合MySQL与达梦(DM)多数据源配置指南
环境要求
- JDK 1.8+
- Spring Boot 2.7.x/3.x
- MySQL 8.0+
- 达梦数据库(DM) 8.x
一、项目依赖配置
1.1 添加Maven依赖
<!-- 动态数据源核心 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!-- 达梦驱动(需手动下载JAR) -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.140</version>
</dependency>
📌 达梦数据库安装步骤查阅官网即可
二、数据源配置
2.1 application.yml配置
spring:
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值为 master
primary: master # 默认主库
strict: true # 是否严格匹配数据源(未匹配时抛异常)
datasource:
# 主库(MySQL)
master:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
username: mysql
password: mysql
url: jdbc:mysql://127.0.0.1:3306/uta?useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8&rewriteBatchedStatements=true
# 达梦数据源
dameng:
driver-class-name: dm.jdbc.driver.DmDriver
type: com.alibaba.druid.pool.DruidDataSource
username: SYSDBA
password: Root1234
url: jdbc:dm://127.0.0.1:5236/qy
2.2 配置说明
| 参数 | 说明 |
|---|---|
| driver-class-name | MySQL:com.mysql.cj.jdbc.Driver达梦: dm.jdbc.driver.DmDriver |
| url | MySQL:jdbc:mysql://{IP}:{PORT}/{DB}达梦: jdbc:dm://{IP}:5236/{DB} |
| username | MySQL:root 达梦:SYSDBA(默认管理员账号) |
三、数据源切换实现
3.1 使用@DS注解
// 类级注解:该Service所有方法默认使用达梦数据源
@Service
@DS("dameng")
public class UserServiceImpl implements UserService {
// 方法级注解:覆盖类级配置
@DS("master")
public User getMasterUser(Long id) {
return userMapper.selectById(id);
}
}
3.2 注解使用场景
| 注解位置 | 作用域 | 使用场景 |
|---|---|---|
| 类级别 | 当前类所有方法 | 统一指定某个Service使用的数据源 |
| 方法级别 | 当前方法 | 需要临时切换数据源的方法 |
四、验证配置
4.1 开启调试日志
logging:
level:
com.baomidou.dynamic.datasource: DEBUG
4.2 验证日志输出
正常切换时会显示:
DEBUG c.b.d.d.DynamicRoutingDataSource - dynamic-datasource switch to the datasource named [dameng]
4.3 数据库验证
@DS("dameng")
public List<Map<String, Object>> queryDmTables() {
// 查询达梦系统表
return jdbcTemplate.queryForList("SELECT * FROM SYSOBJECTS");
}
五、常见问题排查
5.1 驱动加载失败
现象:ClassNotFoundException: dm.jdbc.driver.DmDriver
解决方案:
- 确认驱动JAR包位于
lib目录 - 检查
systemPath配置是否正确 - 执行
mvn clean install
5.2 数据源切换无效
现象:始终使用默认数据源
排查步骤:
- 确认
@DS注解是否被Spring管理 - 检查方法是否被AOP代理(非public方法不生效)
- 验证事务注解
@Transactional是否在@DS之后执行
5.3 达梦连接失败
现象:Connection refused
排查步骤:
- 确认达梦服务已启动
- 检查防火墙是否开放5236端口
- 验证连接字符串格式:
jdbc:dm://IP:5236/DB
六、最佳实践建议
- 连接池配置:建议为不同数据源单独配置连接参数
dameng:
url: jdbc:dm://localhost:5236/DAMENG
hikari:
maximum-pool-size: 10
connection-timeout: 30000
- 事务管理:在Service层使用
@Transactional
@DS("dameng")
@Transactional
public void batchInsert(List<User> users) {
users.forEach(userMapper::insert);
}
- 多环境配置:通过Profile区分不同环境
spring:
profiles: dev
datasource:
dynamic:
datasource:
master:
url: jdbc:mysql://dev-server:3306/db_master
七、项目结构参考
src/main/java
├── com.example.demo
│ ├── config # 配置类(可选)
│ ├── mapper # MyBatis接口
│ │ ├── mysql # MySQL数据源Mapper
│ │ └── dameng # 达梦数据源Mapper
│ └── service
│ └── impl # Service实现类
通过本文配置,可快速实现MySQL与达梦数据库的混用场景,适用于异构数据库迁移、数据同步等业务需求。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)