在Eclipse的persistence.xml中设置环境变量值

Pet*_*ter 2 java eclipse tomcat jpa

我正在使用OpenShift,我正在尝试将我的应用程序部署到本地Tomcat实例以加快开发速度.我正在使用EclipseLink进行数据库事务,我已经提供了OpenShift在persistence.xml中使用的环境变量,如下所示:

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/mydbname"/> 
<property name="javax.persistence.jdbc.user" value="${env.OPENSHIFT_MYSQL_DB_USERNAME}"/> 
<property name="javax.persistence.jdbc.password" value="${env.OPENSHIFT_MYSQL_DB_PASSWORD}"/>
Run Code Online (Sandbox Code Playgroud)

我在我的本地机器上使用linux,所以我也将所有这些变量值设置为本地版本(localhost,3306等).我已经仔细检查了它们在终端是否可用.我也试过像这里描述的那样提供它们- 我在Eclipse中打开了Tomcat实例的设置,选择了"Open launch configuration",在Arguments选项卡上,我将它们输入到VM参数中(也尝试了"变量". .."菜单).但是,它不起作用,我在PORT变量上得到NumberFormatException,我想它将原始字符串"$ {env.OPENSHIFT_MYSQL_DB_PORT}"作为端口.

(显然,它也不适用于OpenShift.)

我在哪里可以在Eclipse/Tomcat中设置这些变量值以使其工作?

先感谢您!

fre*_*ele 8

在WildFly中,简单和最优雅的方法是在ee子系统中启用属性替换,如下例所示:

<subsystem xmlns="urn:jboss:domain:ee:4.0">
      <spec-descriptor-property-replacement>true</spec-descriptor-property-replacement>
      <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement> 
. . .
</subsystem>
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用带有env前缀的BeanShell表达式来引用环境变量.例如:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://${env.MYSQL_DB_HOST}:${env.MYSQL_DB_PORT}/mydbname"/> 
<property name="javax.persistence.jdbc.user" value="${env.MYSQL_DB_USERNAME}"/> 
<property name="javax.persistence.jdbc.password" value="${env.MYSQL_DB_PASSWORD}"/>
Run Code Online (Sandbox Code Playgroud)

此策略在诸如Openshift之类的云环境中特别有用,您可以将环境变量传递给应用程序,以便对其进行自定义.