如何在单个架构和多个项目中使用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();
}
回答:
如果可以在同一模式中使用两个具有完全“独立生命”的项目,则可以为这两个使用单独的版本表,即:
@PostConstructpublic 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