0

我创建了简单的 JEE 应用程序,在其中使用 Flyway 进行迁移和 Arquillian 集成测试。在测试时,我想将我的应用程序连接到测试数据源和迁移数据库。在春天,这很简单 - 不同的配置文件与连接器的数据。我尝试使用 @Alternative 但它不起作用。我的配置:

部署:

    @Deployment
public static WebArchive createDeployment() {
    File[] files = Maven.resolver()
            .loadPomFromFile("pom.xml")
            .importRuntimeDependencies()
            .resolve()
            .withTransitivity()
            .asFile();

    WebArchive war = ShrinkWrap.create(WebArchive.class)
            .addPackages(true, "com")
            .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml")
            .addAsManifestResource("META-INF/test-beans.xml", "beans.xml")
            .addAsLibraries(files);

    return war;
}

替代实现:

@Local
public interface DatasourceWrapper {
DataSource getDatasource();
 }


@Alternative
@Stateless
public class MainDatasource implements DatasourceWrapper {

@Resource(mappedName = "java:/MySqlDS")
DataSource dataSource;

@Override
public DataSource getDatasource() {
    return dataSource;
   }
}

@Alternative
@Stateless
public class TestDatasource implements DatasourceWrapper {

   @Resource(mappedName = "java:/test")
   DataSource dataSource;
   @Override
   public DataSource getDatasource() {
     return dataSource;
   }
}

我的资源中有 META-INF/beans.xml 和测试资源:

    <alternatives>
    <class>com.config.database.datasource.MainDatasource</class>
    </alternatives>

    <alternatives>
    <class>com.config.database.datasource.TestDatasource</class>
    </alternatives>

在 FlyWay 中,我注入数据源以运行迁移:

    @Inject
    DatasourceWrapper datasourceWrapper;

在开发环境中,我的迁移工作完美。当我在 FlyWayConfig 中调试测试时,我有 MainDatasource,此外,我得到“无法解析位置类路径:db/migration”。:/ 我认为这与我存档中缺少的文件夹 /db/migration 有关。

我不知道如何在集成测试中更改 FlyWay 的数据源。

4

0 回答 0