24.8.6 @ConfigurationProperties与@Value
@Value 注释是核心容器功能,它不提供与类型安全配置属性相同的功能。下表总结了 @ConfigurationProperties 和 @Value 支持的功能:
特征 @ConfigurationProperties @Value
Relaxed binding Yes No
Meta-data support Yes No
SpEL evaluation No Yes
如果为自己的组件定义一组配置键,我们建议您将它们分组到带有 @ConfigurationProperties 注释的POJO中。您还应该知道,由于 @Value
不支持宽松绑定,因此如果您需要使用环境变量来提供值,则它不是一个好的候选者。
最后,虽然您可以在 @Value 中编写 SpEL 表达式,但不会从应用程序属性文件中处理此类表达式。
25.简介
Spring Profiles提供了一种隔离应用程序配置部分并使其仅在特定环境中可用的方法。任何 @Component 或 @Configuration 都可以
用 @Profile 标记以限制何时加载,如以下示例所示:
@Configuration
@Profile("production")
public class ProductionConfiguration {
// ...
}
您可以使用 spring.profiles.active Environment 属性指定哪些配置文件处于活动状态。您可以使用本章前面介绍的任何方法指定属性。
例如,您可以将其包含在 application.properties 中,如以下示例所示:
spring.profiles.active=dev,hsqldb
您还可以使用以下开关在命令行上指定它:--spring.profiles.active=dev,hsqldb 。
25.1添加活动配置文件
spring.profiles.active 属性遵循与其他属性相同的排序规则:最高 PropertySource 获胜。这意味着您可以在 application.properties
中指定活动配置文件,然后使用命令行开关替换它们。
有时,将特定于配置文件的属性添加到活动配置文件而不是替换它们是有用的。spring.profiles.include 属性可用于无条件地添加活动配置
文件。SpringApplication 入口点还有一个用于设置其他配置文件的Java API(即,在 spring.profiles.active 属性激活的配置文件之
上)。请参阅SpringApplication中的 setAdditionalProfiles() 方法 。
例如,当使用开关 --spring.profiles.active=prod 运行具有以下属性的应用程序时, proddb 和 prodmq 配置文件也会被激活:
---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include:
- proddb
- prodmq
请记住,可以在YAML文档中定义 spring.profiles 属性,以确定此特定文档何时包含在配置中。
25.2以编程方式设置配置文件
您可以在应用程序运行之前通过调用 SpringApplication.setAdditionalProfiles(… ) 以编程方式设置活动配置文件。也可以使用Spring
的 ConfigurableEnvironment 界面激活配置文件。
25.3特定于配置文件的配置文件
application.properties (或 application.yml )的配置文件特定变体和通过 @ConfigurationProperties 引用的文件被视为文件并已加
载。有关详细信息,请参见“ 第24.4节”“特定于配置文件的属性”。
26.记录
Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现。为Java Util Logging,Log4J2和 Logback提供了默认配
置 。在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。
默认情况下,如果使用“Starters”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util Logging,Commons
Logging,Log4J或SLF4J的依赖库都能正常工作。
Java有很多日志框架可供使用。如果以上列表看起来令人困惑,请不要担心。通常,您不需要更改日志记录依赖项,并且Spring
Boot默认值可以正常工作。
26。1日志格式
Spring Boot的默认日志输出类似于以下示例:
输出以下项目:
日期和时间:毫秒精度,易于排序。
日志级别:ERROR , WARN , INFO , DEBUG 或 TRACE 。
进程ID。
一个 --- 分隔符,用于区分实际日志消息的开头。
线程名称:括在方括号中(可能会截断控制台输出)。
记录器名称:这通常是源类名称(通常缩写)。
日志消息。
Logback没有 FATAL 级别。它映射到 ERROR 。