1

tomcat7-maven-plugin を使用している Maven3 プロジェクトがあります。環境変数引数を介して組み込みデータベースのパスを jvm に設定したいと考えています。

Java メソッド内で System.getenv("myDataDir") を使用して変数を読み取ると、正しいパスが返されます。しかし、persistence.xml で変数 ${myDataDir} を設定しようとしてから、"mvn tomcat:run" で tomcat を起動すると、変数が実際の値に置き換えられないため、FileNotFoundExceptions が発生します (たとえば、パスが見つかりませんと表示されます)。 ${myDataDir}\derby.log)

何がこれを引き起こしているのかわかりません - これをサポートしていないのが永続化プロバイダー (EclipseLink) なのか、それとも何か他のものなのか。

私のpersistence.xmlは次のようになります。

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="myPersistence" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:${myDataDir}/DB;create=true;upgrade=true" />
      <property name="javax.persistence.jdbc.user" value="admin" />
      <property name="javax.persistence.jdbc.password" value="password" />
      <property name="eclipselink.ddl-generation" value="create-tables" />
      <property name="eclipselink.ddl-generation.output-mode" value="both" />
      <property name="eclipselink.logging.level" value="SEVERE" />
      <property name="eclipselink.logging.file" value="${myDataDir}/derby.log" />
      <property name="eclipselink.application-location" value="${myDataDir}/dbScripts" />
    </properties>
  </persistence-unit>
</persistence>

編集:

私はSpring 3 Framework環境にいることを忘れていました。ウェブ上の例によると、これはpersistence.xmlで環境変数を使用できるはずです...

4

1 に答える 1

1

データベース URL で ${myDataDir} を使用することは、データベースでサポートされていない限り、または独自のビルド スクリプト中に変数を変換していない限り、有効ではありません。

あなたができることは、実行時にコードで構築する必要がある、必要な URL を持つ Persistence.createEntityManagerFactory() にプロパティ マップを渡すことです。

于 2013-06-18T13:39:16.827 に答える