我创建了简单的 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 的数据源。