将Standalone.xml中的环境变量用于Linux VM上的WildFly应用程序



当我启动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上的每个线程,服务会剥离所有环境变量,因此无法引用它们。因此,您必须创建一个存储这些变量的文件,然后在启动时将其作为源。

它们在这里:

  1. 使用新行更新bin/standalone.conf以包含JAVA_OPTS="$JAVA_OPTS -Denv.Environment=$Environment"
  2. 创建/etc/default/appname文件,以便以后可以从中获取。该文件只包含行Environment=tst
  3. 使用更新/etc/init.d/appname文件
    [ -f /etc/default/appname ] && . /etc/default/appname
    export Environment
    
  4. 重载systemctl的守护进程systemctl daemon-reload
  5. 重新启动服务systemctl restart appname

最新更新