如何在单个架构和多个项目中使用Flyway迁移

如何管理处理同一数据库模式的多个项目。如果每个项目中的Flyway迁移脚本被另一个项目修改,则不允许启动。

例如:

我有一个带有FlywayInitializer类的Spring Boot ProjectX。

   @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

如何在Flyway中为Project X和Y使用相同的架构名称“ schema1”?


谢谢@jesper_bk帮助了我。正是我想要的,这两个项目在同一架构中具有完全“独立的生活”。但是现在我有以下问题:

第一个执行的项目X正确创建了表,但是如果启动了项目Y,则会出现错误:

。所以我必须将BaselineOnMigrate设置为true。但是,如果我将BaselineOnMigrate设置为true,则Project

Y跳过sql文件 并以

。我如何达到也为Project Y执行了第一个sql脚本V1.0_create_tableY.sql?

 @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();

}

回答:

如果可以在同一模式中使用两个具有完全“独立生命”的项目,则可以为这两个使用单独的版本表,即:

@PostConstruct

public void migrateFlyway() {

final Flyway flyway = new Flyway();

flyway.setSchemas("schema1");

flyway.setLocations("classpath:x.migration");

flyway.setTable("schema_version_y");

flyway.migrate();

}

如果希望他们使用相同的版本控制方案,最好将所有SQL脚本放在单独的第三个项目中,或者更复杂的是,让第三个项目自动从主项目中收集和枚举SQL脚本,这可能会更好。


关于第二个问题,baselineVersionAsString应小于1(例如0)。如果基准版本为1,它将确定您的第一个1.0版脚本与基准匹配,并且应该已经执行。

以上是 如何在单个架构和多个项目中使用Flyway迁移 的全部内容, 来源链接: utcz.com/qa/402259.html

回到顶部