Jakarta ee 不同Maven配置文件的不同持久性单元

Jakarta ee 不同Maven配置文件的不同持久性单元,jakarta-ee,database-connection,maven-3,persistence.xml,maven-profiles,Jakarta Ee,Database Connection,Maven 3,Persistence.xml,Maven Profiles,我想根据所选的Maven配置文件使用两个不同的数据库。对于概要文件“生产”,我想使用MySQL数据库,对于“开发”概要文件,我想使用内存中的HSQLDB 我发现可以有两个persistence.xml文件。一个存储在“src/main/resources/META-INF”中,另一个存储在“src/test/resources/META-INF”中。这样就可以选择不同的数据库进行测试 但是也可以根据所选的Maven配置文件进行数据库选择吗?这是可能的,但不需要更改persistence.xml:

我想根据所选的Maven配置文件使用两个不同的数据库。对于概要文件“生产”,我想使用MySQL数据库,对于“开发”概要文件,我想使用内存中的HSQLDB

我发现可以有两个persistence.xml文件。一个存储在“src/main/resources/META-INF”中,另一个存储在“src/test/resources/META-INF”中。这样就可以选择不同的数据库进行测试


但是也可以根据所选的Maven配置文件进行数据库选择吗?

这是可能的,但不需要更改
persistence.xml

我们使用maven配置文件和资源过滤来实现这一点。您需要在
persistence.xml
中定义与
.properties
文件或
.pom
中的属性名称相匹配的占位符

在构建过程中,指定概要文件,maven将用属性替换占位符

我们使用这种技术在不同的部署环境之间切换数据源。您还可以使用它来切换PUs或其他属性

首先,定义用于资源筛选的配置文件:

<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>
      ...
请注意,我们主要用于UI和用户测试。对于我们使用的集成/功能测试。对于Arquillian,您可以定义一个单独的
persistence.xml
文件,甚至可以动态创建一个

<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>
mvn test -Pset_datasource,db_test