プロパティファイルにJTAデータソース名を設定できます
-
21-12-2019 - |
質問
プロパティファイルにJTAデータソース名を設定できます。これは、アプリケーションのpersistance.xmlで読み込まれます。
解決
あなたのデータソース名と他のアプリケーションパラメータを設定できる他の、より簡単な可能性があります。
Mavenプロファイルとリソースフィルタリングを使用します。persistence.xml
ファイルまたは.properties
のプロパティ名と一致するPlaceHostersを定義する必要があります。
ビルド中に、プロファイルを指定し、Mavenはプレースホルダをプロパティに置き換えます。
さまざまな展開環境間のデータソースを切り替えるためにこの手法を使用しました。
編集:
最初に、リソースフィルタリングのプロファイルを定義します。
<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>
.
2つのプロファイルでMavenを呼び出す:
mvn test -Pdatasource,db_test
. 他のヒント
EntityManagerFactory
を使用してPersistence.createEntityManagerFactory(persistenceUnitName, properties)
を動的に生成し、properties
マップを使用してデータソース名を指定することで、persistence.xmlファイルの値をオーバーライドできます。ただし、EntityManager
を使用して@PersistenceContext
を挿入することも、アプリケーション内の任意の場所にEntityManagerFactory
を使用して@PersistenceUnit
を挿入することはできません。これでEntityManagerトランザクションを手動で管理する必要があります。しないでください。これはひどい考えです。