当前位置: 首页 > 知识库问答 >
问题:

使用两个数据源为飞行路线迁移Spring启动提供正确的执行顺序

慕容玉书
2023-03-14

我们有一个核心库和几个集成项目。每个集成项目都使用核心库,并继承核心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实现这一点?

共有1个答案

幸阳波
2023-03-14

给定一个中的多个位置迁移-即:

flyway = Flyway.configure().locations("db/migration/core,db/migration/canb")...

然后Flyway将扫描位置并以严格的版本顺序运行它找到的所有内容。但是,它只会使用一个历史记录表,这意味着您不能像在上面的示例中那样在核心和集成项目中使用相同的版本号 - 您需要做的是:

V1_1__core.sql
V1_2__core.sql
V1_2_1__integration.sql
V2_1__core.sql
V2_1_1__integration.sql

以便集成脚本从相应的所需核心版本中获取其版本号。如果采用此模式,则还需要将过去的记录从一个历史记录表移动到另一个历史记录表,以便在一个位置拥有完整的历史记录。

 类似资料:
  • 作为将SQL脚本迁移到flyway迁移的一部分,我们遇到了一些大量使用Oracle sqlplus语句的脚本。不幸的是,删除它们并使用具有所需权限的用户(例如)不是一个选项。 我们现在想知道是否有一种优雅的方法来使用不同的帐户执行单个迁移?如果支持这一点,那么围绕语句拆分脚本可以很好地解决我们的问题。 其他人是如何处理需要不同帐户的数据库迁移的?

  • 我们使用Liquibase,现在在新项目中,我们必须使用Flyway。在liquibase中,迁移顺序在xml文件中,所以您可以指定什么是第一次迁移,什么是第二次迁移,它不依赖于名称。 所以,当一些开发人员添加新的迁移时,如果之前有人推动了新的迁移,那么他将在Git中遇到冲突,并且必须修复顺序。 这是如何在Flyway中实现的?如果并行添加迁移,如何控制顺序?

  • 在类路径中:/db。迁移有迁移但flyway没有看到这一点,而是爱上了msg 2022-05-02 17:28:07.993INFO 45296 --- [ restartedMain]c. c. c. ConfigServiceProperty tySourceLocator:从服务器获取配置,地址为:http://localhost:8888/story2022-05-02 17:28:08.

  • 我为命令行java迁移执行了以下步骤: < li >创建java文件 当我执行迁移逗号时,它会像 警告:无法解析位置类路径:db/迁移 请查看下面的附件图片,它实际上是罐子。我已经提取了更多信息。

  • 我想知道是否有一种方法可以通过Spring Boot致动器获得CPU使用指标?我可以使用/metrics和/healthendpoint查看其他指标,但无法获得CPU使用情况。我想避免编写一个额外的类来查看CPU使用情况。知道吗?谢谢

  • 目前,我们公司通过手动创建、分发和运行必要的SQL脚本来处理所有数据库模式更改。显然,这会导致各种机器偶尔更新和稀疏更新的问题。 我正在研究更现代的方法来解决这个问题,而Flyway现在是主要的候选人(尽管如果可以提出令人信服的论据,我们仍然愿意使用Liquibase)。 正常流程很简单,和宣传的一样简单,但是我们不知道如何正确处理冲突的迁移脚本。例如,不同个人分支(A和B)上的2名开发人员在不同