当我启动WildFly java应用程序时,在Linux虚拟机上获取要解决的环境变量时遇到了问题。
<system-properties>
<property name="java.util.logging.manager" value="org.jboss.logmanager.LogManager"/>
<property name="appname.url" value="https://${env.Environment}/appname"/>
</system-properties>
当我回显该环境变量(在/etc/environment中定义(时,我得到以下内容:
[ ~ ]$ echo $Environment
tst
我已经尝试更新standalone.xml,将这两个属性设置为true:
<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>
还尝试将此设置设置为true来更新bin/jboss-cli.xml:
<resolve-parameter-values>true</resolve-parameter-values>
使用其服务启动应用程序(即systemctl-restart appname(会在日志中引发错误,如下所示:
ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([("system-property" => "appname.url")]) - failure description: "WFLYCTL0211: Cannot resolve expression 'https://${env.Environment}/appname'"
不幸的是,这并不能解决我的问题。有什么想法吗?
解决方案包括几个步骤,以使WildFly应用程序的服务识别环境变量。它并不完全是一个环境变量,它是你能得到的最接近的变量。对于stackexchange上的每个线程,服务会剥离所有环境变量,因此无法引用它们。因此,您必须创建一个存储这些变量的文件,然后在启动时将其作为源。
它们在这里:
- 使用新行更新
bin/standalone.conf
以包含JAVA_OPTS="$JAVA_OPTS -Denv.Environment=$Environment"
- 创建
/etc/default/appname
文件,以便以后可以从中获取。该文件只包含行Environment=tst
- 使用更新
/etc/init.d/appname
文件[ -f /etc/default/appname ] && . /etc/default/appname export Environment
- 重载systemctl的守护进程
systemctl daemon-reload
- 重新启动服务
systemctl restart appname