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

Arquillian和flyway:不执行迁移

太叔昊苍
2023-03-14

我在一株嵌入的野花上做了阿奎利亚测试。尽管所有移植脚本、集成器类(flyway在其中安装)和所有FlyWay包(来自POM文件)都包含在。war文件(部署在嵌入式wildfly上),不进行迁移。

这有什么原因吗?这是原则上不起作用还是我错过了什么?

我喜欢实现的是,arquillian运行的自动测试将设置一个内存数据库,其方案与使用相同迁移脚本的生产数据库相同。

编辑:正如ytg下面所问的,我添加了Integrator类;但是,此代码没有在arquillian测试中输入;如果我在集成方法之上设置断点,它永远不会被击中。为什么?

import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationInfo;
import org.hibernate.cfg.Configuration;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.metamodel.source.MetadataImplementor;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;

public class FlywayIntegrator implements Integrator
{
    @Override
    public void integrate(final Configuration configuration,
                          final SessionFactoryImplementor sessionFactoryImplementor,
                          final SessionFactoryServiceRegistry sessionFactoryServiceRegistry)
    {

        System.out.println("Starting Flyway database migrations");

        Flyway flywayEvending = new Flyway();

        // enable this to migrate from the state currently on useqrnow.com
        flywayEvending.setBaselineVersionAsString("0");
        flywayEvending.setBaselineOnMigrate(true);
        flywayEvending.setDataSource(...)

        flywayEvending.setLocations(...);
        for (MigrationInfo i : flywayEvending.info().all())
        {
            System.out.println("migrate task: " + i.getVersion() + " : " + i.getDescription() + " from file: " + i.getScript());
        }
        flywayEvending.migrate();
    }

    @Override
    public void integrate(final MetadataImplementor metadataImplementor, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry)
    {
        // do nothing
    }

    @Override
    public void disintegrate(final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry)
    {
        // do nothing
    }
}

共有1个答案

潘灵均
2023-03-14

过了很久,我重试解决这个问题。这很容易:我错过了添加文件元- INF /服务/组织.Hibernate.集成器.spi.集成器,我们必须在其中存储集成器类。我需要将此文件添加到收缩包装创建的 .war 中。

 类似资料:
  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 我的许多迁移脚本中的第一个创建了模式和表空间,其余的迁移脚本在其中创建表、执行插入等。这样做是为了删除整个模式,然后使用flyway从头开始。cmd flyway migrate命令连接为“SYS as SYSDBA”,验证我的迁移文件,然后给出以下错误: 错误:找到不带元数据表的非空架构“SYS”!使用baseline()或将baselineOnMigrate设置为true来初始化元数据表。 在

  • 在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出: 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。 但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。 迁移前的Flyway信息数据:

  • 我们希望使用Flyway进行数据库迁移。除了迁移脚本之外,我们还需要执行一些不应被视为迁移的脚本(并且不需要在schema_version表中跟踪)。例如,执行包含配置数据或仅与开发环境相关的测试数据的脚本。我们仍然希望使用flyway-maven-plugin来执行这些SQL脚本,而不是在我的flyway-maven-plugin之前/之后运行的不同maven插件。 对于flyway的迁移前和迁

  • 将Flyway Maven插件从2.3升级到3.0后,我得到了: [错误]无法在项目xxx上执行目标org.flywaydb:flyway-maven-plugin:3.0:migrate(default-cli):org.flywaydb.core.api.flywayexception:验证失败。发现应用的迁移和可用的迁移之间存在差异:迁移V003__data_feed_sources_loc

  • 在Spring启动应用程序中,我们在db.migrations资源文件夹中设置了版本化迁移 V1_0__create_table.sql V1_1__apply_roles.sql R__create_stored_proc.sql 版本化迁移(V1\u 0和V1\u 1)在应用程序启动时运行/验证,但似乎根本不会触发可重复迁移(R\u)。 我们有一个后迁移。sql,这似乎是触发的。 有人能帮我理