配置参考指南
本指南的内容已经修订并拆分为其他主题。请查看附加信息部分。 |
在本参考指南中,我们将介绍 Quarkus 配置的各个方面。Quarkus 应用程序和 Quarkus 本身(核心和扩展)都通过相同的机制进行配置,该机制利用 SmallRye Config API,它是 MicroProfile Config 规范的实现。
如果您正在寻找有关如何使 Quarkus 扩展可配置的信息,请参阅编写您自己的扩展指南。 |
1. 配置源
默认情况下,Quarkus 从多个来源读取配置属性(按降序排列)
-
(400) 系统属性
-
(300) 环境变量
-
(295) 当前工作目录中的 .env 文件
-
(260)
$PWD/config/application.properties
中的 Quarkus 应用程序配置文件 -
(250) 类路径中的 Quarkus 应用程序配置文件
application.properties
-
(100) 类路径中的 MicroProfile Config 配置文件
META-INF/microprofile-config.properties
最终配置是所有这些来源定义的属性的聚合。配置属性查找从可用的最高序数配置源开始,并向下遍历到其他来源,直到找到匹配项。这意味着任何配置属性都可以通过在更高序数的配置源中设置不同的值来覆盖一个值。例如,使用环境变量配置的属性会覆盖使用 application.properties
文件提供的值。

1.1. 系统属性
系统属性可以通过启动期间的 -D
标志传递给应用程序。以下示例将值 youshallnotpass
分配给属性 quarkus.datasource.password
。
-
对于 Quarkus 开发模式:
./mvnw quarkus:dev -Dquarkus.datasource.password=youshallnotpass
-
对于 runner jar:
java -Dquarkus.datasource.password=youshallnotpass -jar target/quarkus-app/quarkus-run.jar
-
对于本机可执行文件:
./target/myapp-runner -Dquarkus.datasource.password=youshallnotpass
1.2. 环境变量
-
对于 runner jar:
export QUARKUS_DATASOURCE_PASSWORD=youshallnotpass ; java -jar target/quarkus-app/quarkus-run.jar
-
对于本机可执行文件:
export QUARKUS_DATASOURCE_PASSWORD=youshallnotpass ; ./target/myapp-runner
环境变量名称遵循 MicroProfile Config 指定的转换规则。Config 会为一个给定的属性名(例如 foo.BAR.baz
)搜索三个环境变量
-
foo.BAR.baz
- 完全匹配 -
foo_BAR_baz
- 将每个既不是字母数字也不是_
的字符替换为_
-
FOO_BAR_BAZ
- 将每个既不是字母数字也不是_
的字符替换为_
;然后将名称转换为大写
SmallRye Config 指定了其他转换规则。
-
带双引号的属性
foo."bar".baz
,将每个既不是字母数字也不是_
的字符替换为_
:FOO__BAR__BAZ
-
带短划线的属性
foo.bar-baz
,将每个既不是字母数字也不是_
的字符替换为_
:FOO_BAR_BAZ
-
索引属性
foo.bar[0]
或foo.bar[0].baz
,将每个既不是字母数字也不是_
的字符替换为_
:FOO_BAR_0_
或FOO_BAR_0__BAZ
在某些情况下,查找确切的属性名称是不可能的。对于包含用户定义的路径段的配置名称就是这种情况。 应用环境变量名称的转换规则后, 如果只有 因此,此类属性始终需要在另一个来源中使用其点分隔版本名称,以消除环境变量名称的歧义。它将提供额外的信息来执行双向转换并将属性名称匹配在一起。
|
1.3. 当前工作目录中的 .env
文件
QUARKUS_DATASOURCE_PASSWORD=youshallnotpass (1)
1 | 名称 QUARKUS_DATASOURCE_PASSWORD 遵循与 环境变量 相同的转换规则。 |
对于 dev
模式,此文件可以放置在项目的根目录中,但建议不要将其签入版本控制,因为它通常包含密码、访问令牌、API 密钥或其他机密信息。
.env 文件中的环境变量无法通过 System.getenv(String) API 访问。 |
1.4. Quarkus 应用程序配置文件
Quarkus 应用程序配置文件从类路径资源加载,例如 src/main/resources/application.properties
,src/test/resources/application.properties
或包含 application.properties
条目的 jar
依赖项。找到的每个 application.properties
都被视为单独的 ConfigSource
,并遵循与其他来源相同的规则(按属性覆盖)。此外,配置文件也可以位于 $PWD/config/application.properties
中。加载从 config 文件夹开始,然后按类路径顺序加载(应用程序源中的 application.properties
文件将在类加载顺序中具有优先级)。
application.properties
greeting.message=hello (1)
quarkus.http.port=9090 (2)
1 | 这是一个用户定义的配置属性。 |
2 | 这是一个由 quarkus-vertx-http 扩展使用的配置属性。 |
config/application.properties 也可以在 dev 模式中使用。该文件需要放置在构建工具输出目录(Maven 的 target 和 Gradle 的 build/classes/java/main )中。但是请记住,构建工具中的任何清理操作(如 mvn clean 或 gradle clean )也会删除 config 目录。 |
1.5. MicroProfile Config 配置文件
src/main/resources/META-INF/microprofile-config.properties
中的 MicroProfile Config 配置文件。
microprofile-config.properties
greeting.message=hello (1)
quarkus.http.port=9090 (2)
1 | 这是一个用户定义的配置属性。 |
2 | 这是一个由 quarkus-vertx-http 扩展使用的配置属性。 |
它的工作方式与 Quarkus 应用程序配置文件 application.properties 完全相同。建议使用 Quarkus application.properties 。 |
1.6. 位置
除了默认的配置位置之外,Quarkus 还提供了一种扫描其他位置以查找配置属性文件的方法。
quarkus.config.locations
配置属性接受多个以逗号 ,
分隔的位置,每个位置都必须表示有效的 URI
。支持的 URI
方案有
-
文件或目录 (
file:
) -
类路径资源
-
jar 资源 (
jar:
) -
http 资源 (
http:
)
所有加载的源都使用找到 quarkus.config.locations
配置属性的源的相同序数。例如,如果 quarkus.config.locations
设置为系统属性,则所有加载的源的序数都设置为 400
(系统属性使用 400
作为其序数)。可以通过设置 config_ordinal
属性和序数值来直接覆盖每个配置源的序数。config_ordinal
属性仅影响其所在源的序数。源首先按序数排序,然后按位置顺序排序,最后按加载顺序排序。
2. 注入
Quarkus 使用 MicroProfile Config 注解在应用程序中注入配置属性。
@ConfigProperty(name = "greeting.message") (1)
String message;
1 | 您可以使用 @Inject @ConfigProperty 或仅使用 @ConfigProperty 。对于使用 @ConfigProperty 注解的成员,@Inject 注解不是必需的。 |
如果应用程序尝试注入未设置的配置属性,则会抛出错误。 |
@ConfigProperty(name = "greeting.message") (1)
String message;
@ConfigProperty(name = "greeting.suffix", defaultValue="!") (2)
String suffix;
@ConfigProperty(name = "greeting.name")
Optional<String> name; (3)
1 | 如果您不为此属性提供值,则应用程序启动将失败,并显示 jakarta.enterprise.inject.spi.DeploymentException: No config value of type [class java.lang.String] exists for: greeting.message 。 |
2 | 如果配置未提供 greeting.suffix 的值,则注入默认值。 |
3 | 此属性是可选的 - 如果配置未提供 greeting.name 的值,则注入一个空的 Optional 。 |
使用 配置映射来对相似的配置属性进行分组。 |
2.1. 默认值
如果属性与默认值相关联(通过 defaultValue
属性),并且没有为该属性提供配置值,那么将使用默认值,而不是抛出 jakarta.enterprise.inject.spi.DeploymentException
。defaultValue
值表示为 String
,并使用与处理配置值相同的转换机制。已经存在几个内置的转换器,用于原始类型、装箱原始类型和其他类;例如
-
原始类型:
boolean
、byte
、short
等。 -
装箱原始类型:
java.lang.Boolean
、java.lang.Byte
、java.lang.Short
等。 -
可选容器:
java.util.Optional
、java.util.OptionalInt
、java.util.OptionalLong
和java.util.OptionalDouble
-
Java
enum
类型 -
JSR 310
java.time.Duration
-
JDK 网络
java.net.SocketAddress
、java.net.InetAddress
等。
正如您可能期望的那样,这些转换器是 org.eclipse.microprofile.config.spi.Converter
实现。因此,这些转换器符合 Microprofile 或自定义实现提供商的表达式规则,例如
-
布尔值在 "true"、"1"、"YES"、"Y" "ON" 的情况下将为
true
。否则,该值将被解释为 false -
对于浮点值和双精度值,小数位必须用点
.
分隔
请注意,当 Optional*
类型和 defaultValue
属性组合使用时,仍然会使用定义的 defaultValue
,并且如果没有为该属性提供值,则 Optional*
将存在并填充转换后的默认值。但是,当属性显式为空时,不会使用默认值,并且 Optional
将为空。考虑以下示例
# missing value, optional property
greeting.name=
在这种情况下,由于 greeting.name
被配置为上面的 Optional*
,因此相应的属性值将为空的 Optional
,并且执行将正常继续。即使配置了默认值,也会出现这种情况:如果属性在配置中被显式清除,则不使用默认值。
另一方面,这个例子
# missing value, non-optional
greeting.suffix=
将导致启动时出现 java.util.NoSuchElementException: SRCFG02004: Required property greeting.message not found
,并且不会分配默认值。
下面是 Quarkus 提供的转换器的示例
@ConfigProperty(name = "server.address", defaultValue = "192.168.1.1")
InetAddress serverAddress;
3. 以编程方式访问
org.eclipse.microprofile.config.ConfigProvider.getConfig()
API 允许以编程方式访问 Config API。此 API 在 CDI 注入不可用的情况下最有用。
String databaseName = ConfigProvider.getConfig().getValue("database.name", String.class);
Optional<String> maybeDatabaseName = ConfigProvider.getConfig().getOptionalValue("database.name", String.class);
不要使用 System.getProperty(String) 或 System.getEnv(String) 来检索配置值。这些 API 没有配置意识,并且不支持本指南中描述的功能。 |
4. 配置文件
我们经常需要根据目标环境以不同的方式配置我们的应用程序。例如,本地开发环境可能与生产环境不同。
配置配置文件允许在同一文件或单独的文件中进行多个配置,并通过配置文件名称在它们之间进行选择。
4.1. 属性名称中的配置文件
为了能够设置具有相同名称的属性,每个属性都需要以百分号 %
开头,后跟配置文件名称和一个点 .
,语法为 %{profile-name}.config.name
quarkus.http.port=9090
%dev.quarkus.http.port=8181
Quarkus HTTP 端口将为 9090。如果 dev
配置文件处于活动状态,则它将为 8181。
.env
文件中的配置文件遵循语法 _{PROFILE}_CONFIG_KEY=value
QUARKUS_HTTP_PORT=9090
_DEV_QUARKUS_HTTP_PORT=8181
如果配置文件没有为特定属性定义值,则使用默认(无配置文件)值
bar=”hello”
baz=”bonjour”
%dev.bar=”hallo”
启用 dev
配置文件后,属性 bar
的值为 hallo
,但属性 baz
的值为 bonjour
。如果启用 prod
配置文件,则 bar
的值为 hello
(因为没有 prod
配置文件的特定值),而 baz
的值为 bonjour
。
4.2. 默认配置文件
默认情况下,Quarkus 提供三个配置文件,这些配置文件在特定条件下自动激活
-
dev - 在开发模式下(即
quarkus:dev
)激活 -
test - 在运行测试时激活
-
prod - 不在开发或测试模式下运行时使用的默认配置文件
4.3. 自定义配置文件
也可以创建其他配置文件,并使用 quarkus.profile
配置属性激活它们。带有新配置文件名称的单个配置属性是唯一的要求
quarkus.http.port=9090
%staging.quarkus.http.port=9999
将 quarkus.profile
设置为 staging
将激活 staging
配置文件。
|
4.4. 配置文件感知文件
在这种情况下,特定配置文件的属性可能位于名为 application-{profile}.properties
的文件中。前面的例子可以表示为
quarkus.http.port=9090
%staging.quarkus.http.test-port=9091
quarkus.http.port=9190
quarkus.http.test-port=9191
在这种风格中,配置文件感知文件中的配置名称不需要以配置文件名称为前缀。 配置文件感知文件中的属性优先于主文件中定义的配置文件感知属性。 |
不要使用配置文件感知文件来设置 |
必须存在一个 |
4.5. 父配置文件
父配置文件为当前配置文件添加一个级别的层次结构。配置 quarkus.config.profile.parent
接受单个配置文件名称。
当父配置文件处于活动状态时,如果在当前活动配置文件中找不到属性,则配置查找将回退到父配置文件。考虑
quarkus.profile=dev
quarkus.config.profile.parent=common
%common.quarkus.http.port=9090
%dev.quarkus.http.ssl-port=9443
quarkus.http.port=8080
quarkus.http.ssl-port=8443
然后
-
活动配置文件是
dev
-
父配置文件是
common
-
quarkus.http.port
为 9090 -
quarkus.http.ssl-port
为 9443
不要使用配置文件感知文件来设置 |
4.6. 多个配置文件
可以同时激活多个配置文件。配置 quarkus.profile
接受以逗号分隔的配置文件名称列表:quarkus.profile=common,dev
。common
和 dev
都是单独的配置文件。
当多个配置文件处于活动状态时,配置文件配置的规则是相同的。如果两个配置文件定义了相同的配置,那么最后一个列出的配置文件具有优先级。考虑
quarkus.profile=common,dev
my.prop=1234
%common.my.prop=1234
%dev.my.prop=5678
%common.commom.prop=common
%dev.dev.prop=dev
%test.test.prop=test
然后
-
common.prop
值为common
-
dev.prop
值为dev
-
my.prop
值为5678
-
test.prop
没有value
也可以定义多个配置文件属性,配置文件名称以逗号分隔。如果在多个配置文件属性中存在相同的属性名称,则具有最具体配置文件的属性获胜
quarkus.profile=dev
%prod,dev.my.prop=1234
%dev.my.prop=5678
%prod,dev.another.prop=1234
然后
-
my.prop
值为 5678。 -
another.prop
值为 1234。
多个配置文件的优先级按相反的顺序工作。使用 |
5. 属性表达式
Quarkus 在配置值上提供属性表达式扩展。表达式字符串是纯字符串和表达式段的混合,表达式段由序列 ${ … }
包裹。
这些表达式在读取属性时解析。因此,如果配置属性是构建时属性,则属性表达式将在构建时解析。如果配置属性可以在运行时覆盖,则将在运行时解析。
考虑
remote.host=quarkus.io
callable.url=https://${remote.host}/
callable.url
属性的解析值为 https://quarkus.net.cn/
。
另一个例子是按配置文件定义不同的数据库服务器
%dev.quarkus.datasource.jdbc.url=jdbc:mysql://:3306/mydatabase?useSSL=false
quarkus.datasource.jdbc.url=jdbc:mysql://remotehost:3306/mydatabase?useSSL=false
可以简化为
%dev.application.server=localhost
application.server=remotehost
quarkus.datasource.jdbc.url=jdbc:mysql://${application.server}:3306/mydatabase?useSSL=false
此外,表达式扩展引擎支持以下段
-
${expression:value}
- 如果扩展找不到值,则在:
之后提供默认值。 -
${my.prop${compose}}
- 组合表达式。首先解析内部表达式。 -
${my.prop}${my.prop}
- 多个表达式。
如果表达式无法扩展且未提供默认值,则会抛出 NoSuchElementException
。
表达式查找在所有配置源中执行。表达式值和扩展值可能位于不同的配置源中。 |
6. 密钥表达式
密钥配置可以表示为 ${handler::value}
,其中 handler
是 io.smallrye.config.SecretKeysHandler
的名称,用于解码或解密 value
。考虑
my.secret=${aes-gcm-nopadding::DJNrZ6LfpupFv6QbXyXhvzD8eVDnDa_kTliQBpuzTobDZxlg}
# the encryption key required to decode the secret. It can be set in any source.
smallrye.config.secret-handler.aes-gcm-nopadding.encryption-key=somearbitrarycrazystringthatdoesnotmatter
查找 my.secret
将使用 SecretKeysHandler
名称 aes-gcm-nopadding
来解码值 DJNrZ6LfpupFv6QbXyXhvzD8eVDnDa_kTliQBpuzTobDZxlg
。
有关更多信息,请查看 SmallRye Config 密钥文档。
SmallRye Config 可能会提供 Quarkus 不完全支持的处理程序。目前,仅支持 |
7. 访问生成的 UUID
Quarkus 的默认配置源提供了一个随机 UUID 值。它在启动时生成 UUID。因此,该值在启动之间会发生变化,包括开发模式下的重新加载。
您可以使用 quarkus.uuid
属性访问生成的值。使用表达式来访问它:${quarkus.uuid}
。例如,它对于配置具有唯一消费者组的 Kafka 客户端很有用
mp.messaging.incoming.prices.group.id=${quarkus.uuid}
8. 清除属性
可选的运行时属性,以及在构建时设置了值或具有默认值的属性,可以通过将空字符串分配给该属性来显式清除。请注意,这只会影响运行时属性,并且只会适用于值不是必需的属性。
remote.host=quarkus.io
使用 -Dremote.host=
查找 remote.host
将抛出一个异常,因为系统属性清除了该值。
9. 索引属性
包含未转义逗号的配置值可以转换为 Collection
。这对于简单的情况有效,但对于更高级的情况来说,它变得繁琐且受到限制。
索引属性提供了一种在配置属性名称中使用索引来映射 Collection
类型中的特定元素的方法。由于索引元素是属性名称的一部分,而不是包含在值中,因此也可以使用它来将复杂对象类型映射为 Collection
元素。考虑
my.collection=dog,cat,turtle
my.indexed.collection[0]=dog
my.indexed.collection[1]=cat
my.indexed.collection[2]=turtle
索引属性语法使用属性名称和方括号 [ ]
,中间有一个索引。
调用 Config#getValues("my.collection", String.class)
将自动创建并转换一个 List<String>
,其中包含值 dog
、cat
和 turtle
。调用 Config#getValues("my.indexed.collection", String.class)
返回完全相同的结果。如果在两种形式(常规和索引)中存在相同的属性名称,则常规值具有优先级。
索引属性按其索引排序,然后添加到目标 Collection
。索引中包含的任何间隙都不会解析为目标 Collection
,这意味着 Collection
结果将存储所有值,而没有任何间隙。
10. 配置 Quarkus
Quarkus 本身通过与您的应用程序相同的机制进行配置。Quarkus 为其自己的配置保留 quarkus.
命名空间。例如,要配置 HTTP 服务器端口,您可以在 application.properties
中设置 quarkus.http.port
。所有 Quarkus 配置属性都已记录并可搜索。
如上所述,以 |
10.1. 构建时配置
某些 Quarkus 配置仅在构建时生效,这意味着在运行时无法更改它们。这些配置在运行时仍然可用,但作为只读配置,并且对 Quarkus 行为没有影响。对任何这些配置的更改都需要重建应用程序本身才能反映此类属性的更改。
在构建时固定的属性在所有配置选项列表中使用锁定图标 () 标记。 |
但是,某些扩展确实定义了在运行时可覆盖的属性。一个简单的例子是数据库 URL、用户名和密码,这些信息仅在您的目标环境中具体知道,因此可以在运行时设置它们并影响应用程序行为。
11. 在发布应用程序后更改构建时属性
如果您处于需要更改应用程序构建后的构建时配置的罕见情况,那么请查看如何使用重新增强来重建不同构建时配置的增强输出。
12. 跟踪构建时使用的有效构建时配置
鉴于配置源通常提供比构建期间实际使用的更多选项,因此了解在 Quarkus 构建过程中实际使用了哪些配置选项可能很有用。
12.1. 转储构建期间读取的构建时配置选项
将 quarkus.config-tracking.enabled
设置为 true
将启用一个配置拦截器,该拦截器将记录在构建过程中读取的每个配置选项及其值。默认情况下,结果报告将存储在 ${project.basedir}/.quarkus/quarkus-prod-config-dump
中。可以使用以下选项配置目标文件
-
quarkus.config-tracking.directory
- 应该存储配置转储的目录,默认为${project.basedir}/.quarkus
-
quarkus.config-tracking.file-prefix
- 文件名前缀,默认值为quarkus
-
quarkus.config-tracking.file-suffix
- 文件名后缀,默认值为-config-dump
-
quarkus.config-tracking.file
- 应该存储配置转储的文件的路径。此选项取代file-prefix
和file-suffix
选项。除非该值为相对路径,否则也会取代quarkus.config-tracking.directory
的值。
文件名 quarkus-prod-config-dump
的 prod
部分指的是 Quarkus 构建模式,表明转储是为生产构建进行的。
选择 ${project.basedir}/.quarkus
目录作为默认位置的原因是为了方便跟踪构建之间的构建时配置更改,并将其用作构建输出缓存工具(例如 Apache Maven 构建缓存 和 Develocity 构建缓存)是否必须重建应用程序二进制文件的指标。
12.2. 跟踪构建之间的构建时配置更改
虽然 quarkus.config-tracking.enabled
启用了有效的构建时配置报告生成,但还可以检查存储在该报告中的值在启动项目的下一次构建之前是否已更改。
Maven 项目可以将以下目标添加到它们的 quarkus-maven-plugin
配置中
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<id>track-prod-config-changes</id>
<phase>process-resources</phase>
<goals>
<goal>track-config-changes</goal>
</goals>
</execution>
<!-- other executions would follow below -->
track-config-changes
目标查找 ${project.basedir}/.quarkus/quarkus-prod-config-dump
(文件名和目录是可配置的),如果该文件已经存在,则检查存储在配置转储中的值是否已更改。它将记录已更改的选项,并将 ${project.basedir}/.quarkus/quarkus-prod-config-dump
中存在的每个选项的当前值保存在 ${project.basedir}/target/quarkus-prod-config.check
中(目标文件名和位置可以配置)。如果自上次构建以来构建时配置未更改,则 ${project.basedir}/.quarkus/quarkus-prod-config-dump
和 ${project.basedir}/.quarkus/quarkus-prod-config-dump
将相同。
12.2.1. 转储 Quarkus 应用程序依赖项
除了转储配置值之外,track-config-changes
目标还转储所有 Quarkus 应用程序依赖项,包括 Quarkus 构建时依赖项。该文件可用于检查自上次运行以来 Quarkus 构建类路径是否已更改,例如与 Develocity 的校验和类路径的能力一起使用。默认情况下,依赖项列表将存储在 target/quarkus-prod-dependencies.txt
文件下。可以使用插件参数配置不同的位置。
12.2.2. 当找不到记录的配置时转储当前构建配置
默认情况下,track-config-changes
查找先前构建期间记录的配置,如果未找到则不执行任何操作。启用 dumpCurrentWhenRecordedUnavailable
参数将使其转储当前构建配置选项,同时考虑 quarkus.config-tracking.*
配置。
与在 |
13. 在静态初始化阶段注入的配置属性值
Quarkus 收集在 静态初始化阶段期间注入到 CDI bean 中的配置属性值。然后将收集的值与其运行时初始化对应值进行比较,如果检测到不匹配,则应用程序启动失败。这怎么可能发生?例如,假设有一个 CDI bean org.acme.MyBean
。MyBean
注入一个名为 foo
的 @ConfigProperty
,并在本机构建期间初始化。配置属性在本机构建期间不存在,因此使用默认值 bar
。但是稍后,当应用程序启动时,该属性是使用系统属性定义的:-Dfoo=baz
。这将导致不一致的状态和意外的行为。因此,在这种情况下,Quarkus 默认会失败。
package org.acme;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.context.Initialized;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@ApplicationScoped
public class MyBean {
@ConfigProperty(name = "foo", defaultValue = "bar") (1)
String foo;
void onInit(@Observes @Initialized(ApplicationScoped.class) Object event) { (2)
// this observer method is notified during STATIC_INIT...
}
}
1 | 当创建 bean 时会注入配置属性,并且该值是固定的。 |
2 | 在这种特定情况下,观察者 @Initialized(ApplicationScoped.class) 导致了 bean 的初始化。但是,还有其他可能性。例如,某些扩展在静态初始化阶段初始化组件。 |
您可以使用 @io.quarkus.runtime.annotations.StaticInitSafe
注释注入的字段/参数,以将注入的配置对象标记为可以在静态初始化阶段安全地初始化。
package org.acme;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.context.Initialized;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import io.quarkus.runtime.annotations.StaticInitSafe;
@ApplicationScoped
public class MyBeanNoFailure {
@StaticInitSafe (1)
@ConfigProperty(name = "foo", defaultValue = "bar")
String foo;
void onInit(@Observes @Initialized(ApplicationScoped.class) Object event) {
// this observer method is notified during STATIC_INIT...
}
}
1 | 指示 Quarkus 如果检测到不匹配则不要失败。 |
14. 附加信息
15. 配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
---|---|---|
将此设置为 环境变量: 显示更多 |
布尔值 |
|
字符串列表 |
||
接受单个配置文件名称。如果在当前活动配置文件中找不到配置属性,则配置会在通过此配置设置的配置文件中执行相同的查找。 环境变量: 显示更多 |
字符串 |
|
要与 Config 一起加载的其他配置位置。该配置支持多个以逗号分隔的位置,每个位置都必须表示有效的 环境变量: 显示更多 |
URI 列表 |
|
验证 环境变量: 显示更多 |
布尔值 |
|
启用在 DEBUG 日志级别记录配置值查找。 环境变量: 显示更多 |
布尔值 |
|
如果应用程序以与编译时不同的构建时配置启动,应该发生什么。 这对于防止配置错误可能很有用。 如果设置为 如果设置为 利用 `@io.quarkus.test.junit.TestProfile` 的原生测试始终以 环境变量: 显示更多 |
|
|