在配置文件中使用变量

可以在配置中使用变量来避免利用硬编码值,因为在不同环境中复用配置时,硬编码值可能不合适。

有关此任务

可以通过在下列任一位置设置属性来定义变量:
  • 在服务器配置文件或随附的文件中
  • bootstrap.properties 文件中
可引用以下预定义变量:
如果在多个位置指定了同一变量,那么优先顺序如下所示:
  • bootstrap.properties 中的变量覆盖进程环境变量
  • server.xml 或所包含 XML 文件中的变量覆盖 bootstrap.properties 中的变量及进程环境变量
最佳实践: 特定于特定服务器的变量 (例如,端口号) 在 bootstrap.properties 文件中指定,允许在多个服务器之间共享 server.xml ,同时在每个服务器中保持这些值不同。 在一组服务器之间共享变量(例如,特定主机的数据库配置)最好是在要包括到父配置文件中的 xml 文件内指定。
最佳实践: 变量名称必须以字母字符开头,并且必须仅包含以下字符: 字母字符,数字字符以及 "_" 和 "。" 字符。

过程

  • 在配置文件中指定变量。

    变量定义语法为 variable_name=value。 如果该值包含路径,那么它将在配置处理期间规范化(通过将重复的正斜杠和反斜杠替换为单一正斜杠),除非该值以双正斜杠或双反斜杠开头,在此情况下,它们将保持不变。

    最佳实践: 如果需要设置变量的值以包含重复的正斜杠 (有时用于 JDBC 驱动程序连接 URL) ,请在双斜杠处将该值分为两个部分。 通过放置双正斜杠充当初始字符,规范化将被阻止。 例如,要存储值 "jdbc:db2://host_name.com",请使用两个变量:
    URL_PART_1="jdbc:db2:"
    URL_PART_2="//host_name.com"
    配置文件中所定义变量的作用域会限定为使用这些变量的配置元素。 例如,下列代码段创建称为 updateTrigger_var 的变量以用在 applicationMonitor 配置元素中:
    <applicationMonitor updateTrigger_var="mbean" />
    要创建特定配置实例(例如应用程序或资源条目)中使用的变量,还必须指定实例标识。 例如:
    <httpEndpoint id="defaultHttpEndpoint" HTTP_default_var="8889" />
  • bootstrap.properties 文件中指定变量。
    bootstrap.properties 文件中所定义变量的作用域不会限定为特定配置元素。 变量以键值对的形式输入。 例如:
    HTTP_default_var=8006
  • 使用配置中所定义的变量。
    变量替换语法为 ${variable_name}。 可通过指定 ${variable_name1}${variable_name2} 来并置多个变量值。 例如,要使用 HTTP_default_var 变量,请将下列代码段添加到配置文件:
    <httpEndpoint id="defaultHttpEndpoint"
    httpPort="${HTTP_default_var}">
    </httpEndpoint>
  • 在配置中使用 variable 元素。
    可以使用 variable 元素在服务器配置中全局定义变量。 如果在包含的文件中定义了相同的变量,那么该变量会由 server.xml 文件中的变量覆盖。 例如,要使用 variable 元素,请将下列代码段添加到配置文件:
    <variable name="HTTP_default_var" value="8889" />
  • 在配置中使用进程环境变量。

    如果您使用 env. 配置变量前缀,那么进程环境变量可用,例如:

    <fileset dir="${env.LIBRARY_DIR}" includes="*.jar"/>

    有关指定环境变量的更多信息,请参阅 定制 Liberty 环境

  • 在配置中使用列表变量。
    通常,变量无法表示以逗号分隔的值列表来用于多值配置属性。 包含逗号的变量会解释为单个字符串,而不是多个值。 通过以 ${list(...)} 指定变量名称,可以将变量解释成以逗号分隔的值列表。 例如:
    <variable name="ports" value="80,9080"/>
    

    ${ports} 解释为字符串 "80, 9080"

    ${list(ports)} 会解释为集合,其中包含字符串 "80""9080"

  • 在配置中使用变量表达式。
    对于配置变量,可使用 ${<operand><operator><operand>} 格式的受限变量表达式语法。 此变量的描述如下所示:
    operand
    操作数可以是长整数字面值或包含长整数值的变量的名称。 变量名称必须以字母字符开头,并且必须仅包含以下字符: 字母字符,数字字符以及 "_" 和 "." 字符。
    operator
    可用运算符如下所示:
    • +,表示加法
    • -,表示减法
    • *,表示乘法
    • /,表示除法
    如果无法解析表达式,使用了非整数值或发生了算术错误,那么该行为未定义。
    例如,如果定义了 HTTP_port_base 变量,那么可使用变量表达式来定义多个 httpEndpoint:
    <httpEndpoint id="defaultHttpEndpoint" httpPort="${HTTP_port_base+0}"/>
    <httpEndpoint id="httpEndpoint2" httpPort="${HTTP_port_base+1}"/>
  • 覆盖配置中的可继承属性。

    可以覆盖配置中可继承属性的缺省值。 可继承属性列示在 " Liberty 功能部件 " 页面上。 可以通过查找 Inherits 类型来确定具有继承的属性的元素。 例如,onError 属性是其中一个可继承属性。 要为 onError 属性全局定义变量名称,可以在 bootstrap.properties 中设置或在 server.xml 文件中使用 variable 元素来设置。 如果在两个文件中指定相同的变量名称,那么会使用 server.xml 文件中的值。 如果两个文件中均未显式地设置该属性,那么该属性会使用缺省值。 如果给可继承属性设置了无效值,那么属性值回退到 bootstrap.propertiesserver.xml 文件中定义的全局值,或者回退到缺省值(如果未在全局级别定义)。

    另一个示例是 Liberty中的 logging properties