YAML 配置
您可以使用 YAML 文件 application.yaml
来配置您的 Quarkus 应用程序,而不是标准的 Java 属性文件 application.properties
。
YAML 广泛用于定义资源描述符,尤其是在 Kubernetes 中。
启用 YAML 配置
要启用 YAML 配置,请添加 quarkus-config-yaml
扩展
quarkus extension add quarkus-config-yaml
./mvnw quarkus:add-extension -Dextensions='quarkus-config-yaml'
./gradlew addExtension --extensions='quarkus-config-yaml'
或者,将以下依赖项添加到您的项目中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-config-yaml</artifactId>
</dependency>
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
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.cors
和 quarkus.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"
}
]
}
}