可以在配置中使用变量来避免利用硬编码值,因为在不同环境中复用配置时,硬编码值可能不合适。
有关此任务
可以通过在下列任一位置设置属性来定义变量:
- 在服务器配置文件或随附的文件中
- 在 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.properties 或 server.xml 文件中定义的全局值,或者回退到缺省值(如果未在全局级别定义)。
另一个示例是 Liberty中的 logging properties 。