質問

プロパティファイルに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トランザクションを手動で管理する必要があります。しないでください。これはひどい考えです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top