这是可能的,但无需更改persistence.xml:
为此,我们使用 Maven 配置文件和资源过滤。您需要在persistence.xml 中定义与.properties 文件或.pom 中的属性名称相匹配的占位符。
在构建期间,您指定配置文件,maven 将用您的属性替换占位符。
我们已经使用这种技术在不同的部署环境之间切换数据源。也可以用来切换PU或者其他属性。
首先,定义资源过滤的配置文件:
<profiles>
<profile>
<id>set_datasource</id>
<build>
<!-- enable resource filter to set the datasource name -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
...
为每个数据源创建一个配置文件:
<profile>
<id>db_test</id>
<properties>
<database.name>test_ds</database.name>
</properties>
</profile>
在您的持久性单元中,准备占位符
<persistence-unit name="my_db">
<jta-data-source>java:jboss/datasources/${datasource.name}</jta-data-source>
</persistence-unit>
使用两个配置文件调用 maven:
mvn test -Pset_datasource,db_test
请注意,我们主要将其用于 UI 和用户测试。对于集成/功能测试,我们使用Arquillian。对于 Arquillian,您可以定义一个单独的 persistence.xml 文件,甚至可以即时创建一个。