3.6.6. 属性替换
JBoss EAP 允许您使用表达式来定义可在配置中替换字面值的可替换属性。表达式使用 ${PARAMETER: DEFAULT_VALUE}
格式。如果设置了指定参数,则将使用参数的值。否则,将使用提供的默认值。
解析表达式支持的源包括系统属性、环境变量和密码库。对于部署,源可以是部署存档中的 META-INF/jboss.properties 文件中的属性
。对于支持子部署的部署类型,如果属性文件位于外部部署中,则解析范围仅限于所有子部署,如 EAR。如果属性文件在子部署中,则解析的范围仅限于该子部署。
以下 standalone.xml
配置文件的示例将 公共
接口的 inet-address
设为 127.0.0.1
,除非设置了 jboss.bind.address
参数。
<interface name="public"> <inet-address value="${jboss.bind.address:127.0.0.1}"/> </interface>
将 EAP 启动为单机服务器时,可以使用以下命令设置 jboss.bind.address
参数:
$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS
嵌套表达式
表达式可以嵌套,允许更高级地使用表达式来代替固定值。嵌套表达式的格式类似于普通表达式的格式,但一个表达式被嵌入在另一个表达式中,例如:
${SYSTEM_VALUE_1${SYSTEM_VALUE_2}}
嵌套表达式是递归评估的,因此首先评估内嵌表达式 ,然后评估外部表达式。表达式也可能是递归的,其中表达式解析为其他表达式,然后解析。允许表达式的任何位置都允许嵌套表达式,但管理 CLI 命令除外。
例如,如果数据源定义中使用的密码被屏蔽,则可以使用嵌套表达式。数据源的配置可能包含以下行:
<password>${VAULT::ds_ExampleDS::password::1}</password>
ds_ExampleDS
的值可以替换为使用嵌套表达式的系统属性(datasource_name
)。数据源的配置可以改为有以下行:
<password>${VAULT::${datasource_name}::password::1}</password>
JBoss EAP 首先评估表达式 ${datasource_name}
,然后将其输入到更大的表达式并评估生成的表达式。此配置的优点在于数据源的名称是从固定配置中提取的。
基于描述符的特征替换
应用程序配置(如数据源连接参数)通常会因开发、测试和生产环境而异。构建系统脚本有时可以容纳这种差异,因为 Jakarta EE 规范不包含将这些配置外部化的方法。借助 JBoss EAP,您可以使用基于描述符的属性替换在外部管理配置。
基于描述符的属性替换基于描述符的属性,允许您从应用和构建链中删除对环境相关的假设。特定环境的配置可以在部署描述符中指定,而不是注释或构建系统脚本。您可以在文件中提供配置,或者作为参数在命令行中提供。
ee
子系统中有几个标记控制是否应用属性替换。
JBoss 特定的描述符替换由 jboss-descriptor-property-replacement
标志控制,默认情况下是 启用 的。启用后,可以在以下部署描述符中替换属性:
-
jboss-ejb3.xml
-
jboss-app.xml
-
jboss-web.xml
-
*-jms.xml
-
*-ds.xml
以下管理 CLI 命令可用于启用或禁用特定于 JBoss 的描述符中的属性替换:
/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)
Jakarta EE 描述符替换由 spec-descriptor-property-replacement
标志控制,默认为 禁用。启用后,可以在以下部署描述符中替换属性:
-
ejb-jar.xml
-
persistence.xml
-
application.xml
-
web.xml
以下管理 CLI 命令可用于在 Jakarta EE 描述符中启用或禁用属性替换:
/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)