编辑此页面

YAML 配置

您可以使用 YAML 文件 application.yaml 来配置您的 Quarkus 应用程序,而不是标准的 Java 属性文件 application.properties

YAML 广泛用于定义资源描述符,尤其是在 Kubernetes 中。

启用 YAML 配置

要启用 YAML 配置,请添加 quarkus-config-yaml 扩展

CLI
quarkus extension add quarkus-config-yaml
Maven
./mvnw quarkus:add-extension -Dextensions='quarkus-config-yaml'
Gradle
./gradlew addExtension --extensions='quarkus-config-yaml'

或者,将以下依赖项添加到您的项目中

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-config-yaml</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-config-yaml")

添加扩展或依赖项后,为避免混淆,请删除 src/main/resources/application.properties 文件并创建 src/main/resources/application.yaml 文件。

如果两个文件都存在,Quarkus 会优先使用 YAML 文件中的属性。
Quarkus 识别 .yml.yaml 文件扩展名。

YAML 配置示例

以下代码片段给出了 YAML 配置的示例

# YAML supports comments
quarkus:
  datasource:
    db-kind: postgresql
    jdbc:
      url: jdbc:postgresql://:5432/some-database

# REST Client configuration property
quarkus:
  rest-client:
    org.acme.rest.client.ExtensionsService:
      url: https://stage.code.quarkus.io/api
# For configuration property names that use quotes, do not split the string inside the quotes
quarkus:
  log:
    category:
      "io.quarkus.category":
        level: INFO
quarkus:
  datasource:
    jdbc:
      url: jdbc:postgresql://:5432/quarkus_test

  hibernate-orm:
    database:
      generation: drop-and-create

  oidc:
    enabled: true
    auth-server-url: https://:8180/auth/realms/quarkus
    client-id: app


app:
  frontend:
    oidc-realm: quarkus
    oidc-app: app
    oidc-server: https://:8180/auth

# With profiles
"%test":
   quarkus:
     oidc:
       enabled: false
     security:
        users:
            file:
              enabled: true
              realm-name: quarkus
              plain-text: true

配置文件

正如您在之前的代码片段中看到的,您可以在 YAML 中使用配置文件

在 YAML 中,不允许以 % 开头的键。但是,配置文件键必须以此符号开头。 为了解决这个问题,请用双引号将配置文件键括起来,如示例 "%test" 所示。

"%test" 键下的所有配置仅在启用 test 配置文件时激活。例如,之前的代码片段显示,当 test 配置文件处于活动状态时,OpenID Connect (OIDC)(quarkus.oidc.enabled: false)将被禁用。 如果没有 test 配置文件,则默认启用 OIDC。

您还可以定义自定义配置文件,例如以下示例中的 %staging

quarkus:
  http:
    port: 8081

"%staging":
    quarkus:
        http:
          port: 8082

如果您启用 staging 配置文件,则 HTTP 端口将设置为 8082 而不是 8081

YAML 配置还支持配置文件感知文件。在这种情况下,特定配置文件的属性可以驻留在名为 application-{profile}.yaml 的文件中。 前面的示例可以表示为

quarkus:
  http:
    port: 8081
application-staging.yaml
quarkus:
  http:
    port: 8082

表达式

YAML 格式还支持 属性表达式,方法是使用与 Java 属性相同的格式

mach: 3
x:
  factor: 2.23694

display:
  mach: ${mach}
  unit:
    name: "mph"
    factor: ${x.factor}

您可以使用 .(点)分隔符引用嵌套属性,例如 ${x.factor}

外部 application.yaml 文件

application.yaml 文件也可以放置在 config/application.yaml 中,以专门化运行时配置。 该文件必须存在于相对于 Quarkus 应用程序运行程序的工作目录的根目录中

.
├── config
│    └── application.yaml
├── my-app-runner

如果存在常规 application.yaml 文件,则此文件中的值将覆盖其任何值。

配置属性冲突

MicroProfile Config 规范将配置属性定义为任意 . 分隔的字符串。 但是,诸如 YAML 之类的结构化格式仅支持可能的配置命名空间的子集。 例如,考虑两个配置属性 quarkus.http.corsquarkus.http.cors.methods。 一个属性是另一个属性的前缀,因此可能无法立即显而易见如何在 YAML 配置中同时指定两个键。

这可以通过使用 ~ 作为 null 键来表示任何 YAML 属性是另一个属性的前缀来解决

quarkus:
  http:
    cors:
      ~: true
      methods: GET,PUT,POST

YAML null 键不包含在配置属性名称的程序集中,允许它们在任何级别用于消除配置属性的歧义。

尽管 Quarkus 主要使用 .properties 文件扩展名进行配置,但 snakeyaml 库(用于在 Quarkus 中解析 YAML)也可以解析 JSON 结构。 这意味着您可以在 YAML 文件中使用 JSON 内容。

YAML 和 JSON 结构可以在 application.yaml 文件中读取。

当然,这里有一个关于如何使用 Quarkus 的复杂配置结构的循序渐进的指南

  • 定义您的配置接口。

@ConfigMapping(prefix = "server")
public interface ServiceConfig {

  List<Environment> environments();

  interface Environment {
    String name();
    String services();
  }
}
  • 创建适当的 JSON 结构并将其存储在 YAML 文件中。

{
  "server": {
    "environments": [
      {
        "name": "dev",
        "services": "bookstore"
      },
      {
        "name": "batch",
        "services": "warehouse"
      }
    ]
  }
}

相关内容