在 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 服務及其中的腳本,可能涉及到很多修改,而公用庫自然是不建議有過多的修改

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