无法读取persistence.xml中的环境变量(Not able to read environ

2019-10-18 06:19发布

我有哪里我使用的是tomcat7 - Maven的插件一个Maven3项目。 我想通过一个环境变量参数传递给JVM设置嵌入式数据库的路径。

读一本Java的方法中与System.getenv变量(“myDataDir”)返回正确的路径。 但是,当我尝试设置变量$ {} myDataDir在我的persistence.xml,然后我开始与雄猫“MVN 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环境。 根据网络上的例子,这应该是能够在persistence.xml中使用环境变量...

Answer 1:

使用$ {} myDataDir数据库中的URL是无效的,除非你的数据库支持,或除非你是在自己的编译脚本翻译的变量。

你可以做的是传递一个属性映射到您想要的网址Persistence.createEntityManagerFactory(),您必须在代码建立在运行时。



文章来源: Not able to read environment variable in persistence.xml