1.9. 属性表达式
您可以将属性引用和文本字符串组合成属性表达式,并将它们用作红帽构建的 Quarkus 配置中的值。
与变量一样,属性表达式会动态地替换配置值,可帮助您避免硬编码的值。
您可以从另一个源引用一个配置源中定义的属性。
Red Hat build of Quarkus 在读取配置属性时解析属性表达式:
- 在构建时,如果属性在构建时读取
- 在运行时,如果属性在运行时读取
如果属性表达式无法解析且不包含默认值,红帽构建的 Quarkus 会抛出 NoSuchElementException。
1.9.1. 属性表达式的使用示例 复制链接链接已复制到粘贴板!
要在配置 Quarkus 应用程序时获得灵活性,您可以使用属性表达式,如下例所示。
替换配置属性的值:
为了避免配置中硬编码属性值,您可以使用属性表达式。使用
${<property_name>}语法编写引用配置属性的表达式,如下例所示:application.properties文件示例remote.host=quarkus.io callable.url=https://${remote.host}/callable.url属性的值解析为https://quarkus.io/。设置特定于特定配置配置集的属性值:
在以下示例中,将
%dev配置配置文件和默认配置配置文件设置为使用带有不同主机地址的数据源连接 URL。application.properties文件示例%dev.quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false quarkus.datasource.jdbc.url=jdbc:mysql://remotehost:3306/mydatabase?useSSL=false根据用于启动应用程序的配置配置文件,您的数据源驱动程序使用您为配置集设置的数据库 URL。
您可以通过为每个配置配置集设置自定义
application.server属性的不同值,以简化相同的结果。然后,您可以引用应用程序的数据库连接 URL 中的属性,如下例所示:application.properties文件示例%dev.application.server=localhost application.server=remotehost quarkus.datasource.jdbc.url=jdbc:mysql://${application.server}:3306/mydatabase?useSSL=falseapplication.server属性解析为适当的值,具体取决于您在运行应用程序时选择的配置集。设置属性表达式的默认值:
您可以为属性表达式定义一个默认值。如果扩展表达式所需的属性值没有从任何配置源解析,则 quarkus 使用默认值。您可以使用以下语法为表达式设置默认值:
${<property_name>:<default_value>}在以下示例中,数据源 URL 中的属性表达式使用
mysql.db.server作为application.server属性的默认值:application.properties文件示例quarkus.datasource.jdbc.url=jdbc:mysql://${application.server:mysql.db.server}:3306/mydatabase?useSSL=false嵌套属性表达式:
您可以通过在另一个属性表达式中嵌套属性表达式来编写属性表达式。当扩展嵌套属性表达式时,首先扩展 inner 表达式。您可以使用以下语法嵌套属性表达式:
${<outer_property_name>${<inner_property_name>}}合并多个属性表达式:
您可以使用以下语法将两个或者多个属性表达式加入到一起:
${<first_property_name>}${<second_property_name>}将属性表达式和环境变量合并:
您可以使用属性表达式替换环境变量的值。以下示例中的表达式替换为
HOST环境变量设置的值作为application.host属性的值:application.properties文件示例remote.host=quarkus.io application.host=${HOST:${remote.host}}
如果没有设置 HOST 环境变量,application.host 属性将使用 remote.host 属性的值作为默认值。