Jakarta ee arquillian和flyway:不执行迁移

Jakarta ee arquillian和flyway:不执行迁移,jakarta-ee,flyway,jboss-arquillian,Jakarta Ee,Flyway,Jboss Arquillian,我在嵌入式wildfly上运行arquillian测试。即使所有迁移脚本、Integrator类(其中设置了FlyWay)和所有FlyWay包(来自POM文件)都包含在.war文件(部署在嵌入式wildfly上)中的shrinkwrap中,也不会进行迁移 这有什么原因吗?这原则上不起作用,还是我错过了什么 我想要实现的是,arquillian运行的自动化测试将使用相同的迁移脚本设置内存中的数据库,该数据库与生产数据库具有相同的方案 编辑:正如ytg在下面询问的那样,我添加了Integrator类

我在嵌入式wildfly上运行arquillian测试。即使所有迁移脚本、Integrator类(其中设置了FlyWay)和所有FlyWay包(来自POM文件)都包含在.war文件(部署在嵌入式wildfly上)中的shrinkwrap中,也不会进行迁移

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

我想要实现的是,arquillian运行的自动化测试将使用相同的迁移脚本设置内存中的数据库,该数据库与生产数据库具有相同的方案

编辑:正如ytg在下面询问的那样,我添加了Integrator类;但是,该代码未输入arquillian测试中;如果我在integrate方法的顶部设置一个断点,它将永远不会被命中。为什么?

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
    }
}

过了很长时间,我试着解决这个问题。这很简单:我没有添加文件
META-INF/services/org.hibernate.integrator.spi.integrator
,我们必须在其中存储integrator类。我需要将此文件添加到.war中,该文件由
收缩包装创建。

请包含Integrator类中的设置代码。好的,即使未输入此代码,我也添加了它。如果我设置了一个断点,它在运行arquillian测试时不会被击中……如果您针对WildFly这样的应用程序容器进行测试,您应该在调试模式下运行它并连接远程调试器,否则您只能为运行您的测试的JVM提供调试(这不是同一件事)。谢谢,@bartosz.majsak,但这很清楚。顺便说一句,它没有输入代码并不完全一致,因为我还指出,没有进行迁移。如果它将进入代码而不迁移,那么出现异常的可能性很大。。。有更好的主意吗?你能试试管理WF吗?