如何在Quarkus中配置Flyway实现多Schema数据库迁移
解决方案:Quarkus Flyway多Schema迁移不执行问题
核心问题分析
你的配置中未将命名的Flyway实例(food)与对应的数据源绑定,导致Quarkus没有启动food对应的Flyway迁移进程;同时公共配置与实例配置的边界不清晰,可能引发优先级冲突。
具体修复步骤
1. 绑定Flyway实例到对应数据源
在food schema config区块添加数据源绑定配置,明确指定flyway.food实例使用datasource.food执行迁移:
quarkus.flyway.food.datasource=food
2. 调整公共配置与实例配置的边界
将默认实例(public)的专属配置从公共区分离,确保公共配置仅包含所有实例共享的通用规则:
- 移除公共区的
quarkus.flyway.enabled=true,将其移到默认实例的配置区块 - 公共区仅保留
migrate-at-start、out-of-order等通用规则
3. 确认迁移文件命名规范
由于你开启了validate-migration-naming=true,db/food下的迁移文件必须严格遵循Flyway命名规则,示例格式:
V0.9.4__Initial_food_schema.sql
规则说明:V<版本号>__<描述>.sql(版本号与描述之间为双下划线)
4. 确认文件夹位置
确保db/food和db/public位于项目的src/main/resources目录下,Quarkus仅会扫描该目录下的迁移文件。
修改后的完整application.properties配置
# 公共Flyway配置(所有实例共享) quarkus.flyway.migrate-at-start=true quarkus.flyway.out-of-order=true quarkus.flyway.repair-at-start=true quarkus.flyway.ignore-migration-patterns=*:ignored quarkus.flyway.validate-migration-naming=true # 默认数据源(public schema)的Flyway配置 quarkus.flyway.enabled=true quarkus.flyway.baseline-on-migrate=true quarkus.flyway.baseline-version=0.9.4 quarkus.flyway.baseline-description=Initial version quarkus.flyway.schemas=public quarkus.flyway.locations=db/public quarkus.datasource.db-kind=postgresql quarkus.datasource.username=${DB_USER} quarkus.datasource.password=${DB_PASS} quarkus.datasource.jdbc.url=${JDBC_URL} # food数据源的Flyway配置 quarkus.flyway.food.enabled=true quarkus.flyway.food.datasource=food # 新增:绑定到food数据源 quarkus.flyway.food.baseline-on-migrate=true quarkus.flyway.food.baseline-version=0.9.4 quarkus.flyway.food.baseline-description=Initial version quarkus.flyway.food.schemas=food quarkus.flyway.food.locations=db/food quarkus.datasource.food.db-kind=postgresql quarkus.datasource.food.username=${DB_USER} quarkus.datasource.food.password=${DB_PASS} quarkus.datasource.food.jdbc.url=${JDBC_URL}
验证方法
启动应用后,查看日志是否出现类似以下内容,确认food schema的迁移执行成功:
Flyway Community Edition 9.22.3 by Redgate Database: jdbc:postgresql://xxx:5432/xxx (PostgreSQL 15.3) Successfully validated 1 migration (execution time 00:00.018s) Creating Schema History table "food"."flyway_schema_history" ... Current version of schema "food": << Empty Schema >> Migrating schema "food" to version "0.9.4 - Initial version" Successfully applied 1 migration to schema "food", now at version v0.9.4 (execution time 00:00.035s)
内容的提问来源于stack exchange,提问作者vincentyeung
相关产品推荐
相关产品推荐

