Можем ли мы установить имя источника данных JTA в файле свойств, который будет читаться в persistance.xml приложения.Можем ли мы установить имя источника данных JTA в файле свойств
ответ
Существует еще одна, более простая возможность конфигурирования вашего имени источника данных и других параметров приложения.
Для этого мы используем профили maven и фильтрацию ресурсов. Вам нужно будет определить заполнители в вашем persistence.xml
, которые соответствуют именам свойств в вашем файле .properties
или в вашем .pom
.
Во время сборки вы указываете профиль, и maven заменит заполнители вашими свойствами.
Мы использовали этот метод для переключения источника данных между различными средами развертывания.
EDIT:
Во-первых, определить профиль для фильтрации ресурсов:
<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 -Pdatasource,db_test
Вы можете изменить значение в файле persistence.xml путем динамического генерирования EntityManagerFactory
с использованием Persistence.createEntityManagerFactory(persistenceUnitName, properties)
, и используя properties
карту, чтобы указать имя источника данных. Однако теперь вы не можете вводить EntityManager
с использованием @PersistenceContext
или вводить EntityManagerFactory
с использованием @PersistenceUnit
в любом месте приложения, и вам необходимо вручную управлять транзакциями EntityManager. Не делай этого. Это ужасная идея.
thanks Lane Это поможет. –
Можете ли вы добавить пример кода примера, это очень поможет. –
@Sai См. Редактирование, надеюсь, что это поможет. – kostja