1

Я хочу использовать две разные базы данных в зависимости от выбранного профиля Maven. Для профиля «production» я хочу использовать базу данных MySQL, а для профиля «development» я хочу использовать HSQLDB в памяти.Различные единицы измерения продолжительности для разных профилей Maven

Я узнал, что возможно иметь два файла persistence.xml. Один в «src/main/resources/META-INF», а другой - в «src/test/resources/META-INF». Это дает возможность выбрать другую базу данных для тестирования.

Но возможно ли сделать выбор базы данных в зависимости от выбранного профиля Maven?

ответ

4

Это возможно, хотя и без изменения 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 

Обратите внимание, что мы используем это в основном для пользовательских и пользовательских тестов. Для интеграционных/функциональных тестов мы используем Arquillian. Для Arquillian вы можете определить отдельный файл persistence.xml или даже создать его на лету.