2016-07-06 26 views
1

我正在使用OpenShift,我試圖將我的應用程序部署到本地Tomcat實例以加快開發速度。我使用的EclipseLink爲DB交易,我已經提供了persistence.xml中OpenShift這樣使用環境變量:在Eclipse的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}"/> 

我用我的本地機器上的Linux,所以我給自己定的所有這些變量值也是本地版本(localhost,3306等)。我仔細檢查過它們是否在終端中可用。我也嘗試提供它們,如描述here - 我已經在Eclipse中打開了Tomcat實例的設置,選擇了「Open launch configuration」,並且在Arguments選項卡上,我已經將它們鍵入VM參數中(也嘗試了「Variables」 ..「菜單)。然而,它不工作,我得到了PORT變量的NumberFormatException,我想它需要原始字符串「$ {env.OPENSHIFT_MYSQL_DB_PORT}」作爲端口。

(顯然,它不工作的OpenShift無論是。)

我在哪裏可以在Eclipse/Tomcat的設置這些變量的值,使其工作?

預先感謝您!

回答

4

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

現在您可以使用帶有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}"/> 

這種策略是在雲環境中,如Openshift,在那裏你可以通過環境變量到你的應用程序,以對其進行自定義特別有用。