【发布时间】:2021-09-22 11:58:28
【问题描述】:
我们有一个核心库和几个集成项目。每个集成项目都使用核心库并继承核心 DB flyway 迁移。在核心中,有创建模式和一些初始数据的 flyway 迁移脚本。集成项目还包含迁移脚本。 到目前为止,迁移脚本的执行顺序是核心迁移始终在集成项目之前运行,如下所示:
V1_1__core.sql
V1_2__core.sql
V2_1__core.sql
V1_1__integration.sql
V2_1__integration.sql
etc.
但是,我想要的是版本优先而不是项目,例如:
V1_1__core.sql
V1_2__core.sql
V1_1__integration.sql
V2_1__core.sql
V2_1__integration.sql
etc.
我在核心中使用了以下类:
@Component
public class FlywayModuleMigrationConfig implements FlywayMigrationStrategy {
@Autowired(required = false)
private FlywayModuleMigrationConfigService flywayModuleMigrationConfigService;
@Override
public void migrate(Flyway flyway) {
DataSource dataSource = flyway.getConfiguration().getDataSource();
Flyway coreModule = Flyway.configure()
.schemas("public")
.locations("db/migration/core")
.table("core_schema_version")
.dataSource(dataSource).load();
coreModule.migrate();
//Load module specific Flyway migration scripts
if (flywayModuleMigrationConfigService != null) flywayModuleMigrationConfigService.migrate(flyway);
}
}
以及集成项目中的以下内容:
public class CanbFlywayModuleMigrationConfig implements FlywayModuleMigrationConfigService {
@Override
public void migrate(Flyway flyway) {
DataSource dataSource = flyway.getConfiguration().getDataSource();
Flyway module = Flyway.configure()
.schemas("public")
.locations("db/migration/canb")
.table("canb_schema_version")
.baselineOnMigrate(true)
.dataSource(dataSource).load();
module.migrate();
}
}
Flyway 如何实现这一点?
【问题讨论】:
标签: spring-boot flyway