如何管理处理相同数据库模式的多个项目。每个项目中的Flyway迁移脚本如果被其他项目修改则不允许启动。
例如:
我有一个带有 FlywayInitializer 类的 Spring Boot Project X。
@PostConstruct
public void migrateFlyway() {
final Flyway flyway = new Flyway();
flyway.setSchemas("schema1");
flyway.setLocations("classpath:x.migration");
flyway.migrate();
}
我有一个子模块 Project Y 还有他自己的 FlywayInitializer 类
@PostConstruct
public void migrateFlyway() {
final Flyway flyway = new Flyway();
flyway.setSchemas("schema1");
flyway.setLocations("classpath:y.migration");
flyway.migrate();
}
项目结构:
Project X
src
|
main
|
java
FlywayInitializerX.java
|
resources
V1.0_create_tableX.sql
V1.1_update_tableX.sql
Project Y
src
|
main
|
java
FlywayInitializerY.java
|
resources
V1.0_create_tableY.sql
V1.1_update_tableY.sql
我如何将相同的模式名称“schema1”与 Flyway 一起用于项目 X 和 Y?
EDIT:感谢@jesper_bk 帮助了我。这正是我想要的,这两个项目在同一模式中具有完全“独立的生命”。但现在我有以下问题:
第一个执行的项目 X 正确创建表,但如果项目 Y 启动,我会收到错误发现没有元数据表的非空模式。所以我必须将 BaselineOnMigrate 设置为 true。但如果我将 BaselineOnMigrate 设置为 true,则 Project Y 会跳过 sql 文件V1.0_create_tableY.sql并开始于V1.1_update_tableY.sql。我怎样才能达到第一个sql脚本V1.0_create_tableY.sql也为项目Y执行?
@PostConstruct
public void migrateFlyway() {
final Flyway flyway = new Flyway();
flyway.setBaselineVersionAsString("1");
flyway.setBaselineOnMigrate(true);
flyway.setSchemas("schema1");
flyway.setLocations("classpath:y.migration");
flyway.migrate();
}