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
解决方案

  1. 确认驱动JAR包位于lib目录
  2. 检查systemPath配置是否正确
  3. 执行mvn clean install

5.2 数据源切换无效

现象:始终使用默认数据源
排查步骤

  1. 确认@DS注解是否被Spring管理
  2. 检查方法是否被AOP代理(非public方法不生效)
  3. 验证事务注解@Transactional是否在@DS之后执行

5.3 达梦连接失败

现象Connection refused
排查步骤

  1. 确认达梦服务已启动
  2. 检查防火墙是否开放5236端口
  3. 验证连接字符串格式:jdbc:dm://IP:5236/DB

六、最佳实践建议

  1. 连接池配置:建议为不同数据源单独配置连接参数
dameng:
  url: jdbc:dm://localhost:5236/DAMENG
  hikari:
    maximum-pool-size: 10
    connection-timeout: 30000
  1. 事务管理:在Service层使用@Transactional
@DS("dameng")
@Transactional
public void batchInsert(List<User> users) {
    users.forEach(userMapper::insert);
}
  1. 多环境配置:通过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与达梦数据库的混用场景,适用于异构数据库迁移、数据同步等业务需求。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐