Spring Boot启动时Flyway未自动执行数据库迁移问题排查
解决Spring Boot启动时Flyway未自动执行迁移的问题
你遇到的核心问题是配置层级错误,加上部分配置参数的写法不符合Spring Boot对Flyway的自动配置要求,导致启动时Flyway没有被正确触发。以下是具体修复步骤:
1. 调整Flyway配置层级
你当前把Flyway配置放在了spring.jpa.properties.flyway节点下,但Spring Boot的Flyway自动配置只会读取spring.flyway前缀的配置,这是最关键的错误。需要将Flyway相关配置移到spring根节点下,与datasource、jpa同级。
2. 修正locations配置
你的locations直接指定了单个SQL文件,这不符合Flyway的用法——locations应该指向迁移脚本所在的目录,Flyway会自动扫描该目录下符合命名规范的所有迁移文件。正确写法是classpath:db/migration。
3. 移除冗余的数据库配置
既然spring.datasource已经配置了数据库连接信息,Flyway会自动复用这些配置,无需在flyway节点下重复配置url、user、password,除非你需要用独立的数据库连接执行迁移。
修正后的完整配置示例
logging: level: org.hibernate: sql: DEBUG type.descriptor.sql.BasicBinder: TRACE org.flywaydb: DEBUG spring: datasource: url: jdbc:sqlserver://192.168.100.20;database=asd username: Sa password: Passw0rd jpa: properties: hibernate: search: default: indexmanager: elasticsearch elasticsearch: host: 127.0.0.1:9200 index_schema_management_strategy: drop-and-create required_index_status: yellow javax.persistence.schema-generation: create-source: metadata scripts: action: update create-target: C:\script\db_migration.sql flyway: locations: classpath:db/migration baseline-on-migrate: true baseline-version: 1402.11.09.16.30.00 out-of-order: true enabled: true schemas: hr default-schema: hr create-schemas: true
额外排查要点
- 确认你的项目中已经引入了
spring-boot-starter-flyway依赖,这是Flyway自动配置的前提。 - 启动应用后查看Flyway的DEBUG日志,确认:
- Flyway是否被初始化(日志中会出现
Flyway Community Edition xxx by Redgate字样) - 是否扫描到了目标迁移文件(日志中会显示
Found xxx migrations)
- Flyway是否被初始化(日志中会出现
- 检查迁移脚本的命名严格符合Flyway规范:
V<版本号>__<描述>.sql,你的文件名是符合要求的,确保文件确实放在src/main/resources/db/migration目录下。
内容的提问来源于stack exchange,提问作者amin
相关产品推荐
相关产品推荐

