在 SpringBoot 微服务中管理 flyway migration

原文

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章