我正在使用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}"/>
我在本地计算机上使用linux,所以我也将所有这些变量值设置为本地版本(localhost、3306等)。我已经仔细检查了它们在终端中是否可用。我还尝试提供它们,就像描述的here一样--我已经在Eclipse中打开Tomcat示例的设置,选择“打开启动配置”,并在Arguments选项卡上,我已经将它们输入到VM参数中(也尝试了“Variables...”菜单)。但是,它不起作用,并且我在PORT变量上收到NumberFormatException,我猜它将原始字符串“${env.OPENSHIFT_MYSQL_DB_PORT}”作为端口。
(显然,它在OpenShift上也不起作用。)
在Eclipse/Tomcat中,我可以在哪里设置这些变量值以使其正常工作?
先谢谢你!
4条答案
按热度按时间d4so4syb1#
在WildFly中,最简单、最优雅的方法是在ee子系统中启用属性替换,如以下示例所示:
现在,您可以使用带有env前缀的BeanShell表达式来引用环境变量。例如:
此策略在云环境(如Openshift)中特别有用,在云环境中,您可以将环境变量传递给您的应用程序,以便对其进行自定义。
oo7oh9g92#
我使用的是一个简单的maven jpa项目。
您可以通过一个简单的bash脚本和使用模板文件来完成此操作
模板内容:
bash脚本:
请注意,env var也可以是系统值,您不必将其包含在文件中
运行脚本,然后执行以下操作:
dojqjjoe3#
这是不可能的。如果你使用的是spring,这是可能的,但是对于简单的JPA,这是不可能的。你可以做的是使用编程配置,并做一些类似于Read Environment Variables in persistence.xml file这篇文章中描述的事情
e0bqpujr4#
出于测试目的或在JavaSE世界中,您可以使用full working eclipseLink example。
它从PersistenceUnitInfo示例中获取persistence.xml中定义的所有属性,该示例是从EntityManagerFactory中获取的(通过使用eclipseLink特定实现)。这些属性将替换为环境变量中定义的值。