Flyway 使用 flyway_schema_history
表來跟蹤表的狀態,這是 flyway 默認生成的表
當你只有一個服務或應用的時候,它表現的很棒
但是如果多個微服務同時使用這個默認表,就會報以下錯誤:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed:
Migration checksum mismatch for migration version 1
因爲總有一個或幾個微服務的中腳本 checksum 和表中記錄的不一致
可以爲每個微服務指定不同的表名:
spring:
flyway:
table: service1_flyway_schema_history
然後會報錯:
org.flywaydb.core.api.FlywayException: Found non-empty schema
這時需要另外兩個配置:
spring:
flyway:
baseline-on-migrate: true
baseline-version: 0
除此之外,可以考慮使用一個 commons 服務來管理所有的 migrations,但也許會帶來額外的開銷
我的經驗是,你需要專門的去管理 commons 服務及其中的腳本,可能涉及到很多修改,而公用庫自然是不建議有過多的修改