Frage

Können wir den JTA-Datenquellennamen in der Eigenschaftendatei festlegen, der in persistance.xml der Anwendung gelesen wird?

War es hilfreich?

Lösung

Es gibt eine weitere, einfachere Möglichkeit, den Namen Ihrer Datenquelle und andere Anwendungsparameter konfigurierbar zu machen.

Dafür verwenden wir Maven-Profile und Ressourcenfilterung.Sie müssen Platzhalter in Ihrem definieren persistence.xml die mit den Eigenschaftsnamen in Ihrem übereinstimmen .properties Datei oder in Ihrer .pom.

Während des Builds geben Sie das Profil an und Maven ersetzt die Platzhalter durch Ihre Eigenschaften.

Wir haben diese Technik zum Wechseln der Datenquelle zwischen verschiedenen Bereitstellungsumgebungen verwendet.

BEARBEITEN:

Definieren Sie zunächst ein Profil für die Ressourcenfilterung:

<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>
      ...

Erstellen Sie für jede Datenquelle ein Profil:

<profile>
      <id>db_test</id>
    <properties>
      <database.name>test_ds</database.name>
    </properties>
</profile>

Bereiten Sie in Ihrer Persistenzeinheit den Platzhalter vor

  <persistence-unit name="my_db">
    <jta-data-source>java:jboss/datasources/${datasource.name}</jta-data-source>
  </persistence-unit>

Rufen Sie Maven mit den beiden Profilen auf:

mvn test -Pdatasource,db_test

Andere Tipps

Sie können Werte in Ihrer Datei persistence.xml überschreiben, indem Sie dynamisch eine generieren EntityManagerFactory verwenden Persistence.createEntityManagerFactory(persistenceUnitName, properties), und mit der properties Map, um den Namen der Datenquelle anzugeben.Jetzt können Sie jedoch niemals eine injizieren EntityManager verwenden @PersistenceContext, oder spritzen EntityManagerFactory verwenden @PersistenceUnit irgendwo in Ihrer Anwendung, und Sie müssen Ihre EntityManager-Transaktionen manuell verwalten.Tu es nicht.Das ist eine schreckliche Idee.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top