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 服务及其中的脚本,可能涉及到很多修改,而公用库自然是不建议有过多的修改