You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Flyway为Micronaut双数据源应用实现差异化数据库迁移

Micronaut 多数据源 Flyway 独立迁移配置方法

按以下步骤配置即可实现不同数据源加载独立迁移脚本,不需要自定义扩展:

1. 拆分迁移脚本目录

先把原来单数据源统一放在resources/db/migration下的脚本,按数据源拆分到独立子目录,参考结构:

src/main/resources/
└── db/
    └── migration/
        ├── common/ # 放两个库都需要执行的公共脚本(可选)
        ├── biz/   # 第一个业务库专属脚本
        │   └── V1__init_biz_table.sql
        │   └── V2__load_biz_base_data.sql
        └── log/   # 第二个日志库专属脚本
            └── V1__init_log_table.sql
            └── V2__load_log_init_data.sql

两个独立目录下的脚本版本号不需要全局唯一,Flyway会在每个数据库中维护独立的版本历史表,互不干扰。

2. 按数据源绑定Flyway配置

Micronaut的Flyway配置是和数据源强绑定的,不要把Flyway配置写在全局配置节点,要嵌套在对应数据源的配置下,为每个数据源单独指定脚本扫描路径即可。
以两个数据源名称分别为default(业务库)、log(日志库)为例,application.yml配置参考:

datasources:
  default:
    url: jdbc:mysql://127.0.0.1:3306/biz_db
    driverClassName: com.mysql.cj.jdbc.Driver
    username: db_user
    password: db_pwd
    flyway:
      enabled: true
      # 先加载公共脚本,再加载业务库专属脚本
      locations: classpath:db/migration/common,classpath:db/migration/biz
  log:
    url: jdbc:mysql://127.0.0.1:3306/log_db
    driverClassName: com.mysql.cj.jdbc.Driver
    username: db_user
    password: db_pwd
    flyway:
      enabled: true
      # 先加载公共脚本,再加载日志库专属脚本
      locations: classpath:db/migration/common,classpath:db/migration/log

常见踩坑点

  • 多数据源场景下必须显式给每个数据源指定flyway.locations,如果不配置,所有数据源都会默认扫描classpath:db/migration根目录下的脚本,会出现脚本误执行、表不存在的报错
  • 不要把Flyway配置写在根级的flyway.*节点下,该配置仅对单数据源场景生效,多数据源下会出现配置不生效的问题
  • 每个数据源启动时会自动在自身库内创建flyway_schema_history表记录迁移进度,不需要手动建表,也不需要手动指定不同的历史表名
  • 配置locations时多个路径用英文逗号分隔,Flyway会按路径书写顺序依次扫描执行脚本,注意把公共依赖的脚本路径写在前面。

内容的提问来源于stack exchange,提问作者user1555190

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:45:42