Spring Boot核心功能(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot核心功能(二)相关的知识,希望对你有一定的参考价值。

3. 简介

Spring

Spring Profiles 提供了一种分离应用程序配置部分并使其仅在某些环境中可用的方法。任何​​@Component​​​,​​@Configuration​​​或​​@ConfigurationProperties​​​可以在​​@Profile​​加载时标记为限制,如下例所示:

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration

// ...

您可以使用​​spring.profiles.active​​​ ​​Environment​​​属性来指定哪些配置文件处于活动状态。您可以通过本章前面描述的任何方式指定属性。例如,您可以将它包含在您的​​application.properties​​中,如以下示例所示:

特性

spring.profiles.active=dev,hsqldb

您还可以使用以下开关在命令行上指定它:​​--spring.profiles.active=dev,hsqldb​​.

如果没有配置文件处于活动状态,则启用默认配置文件。默认配置文件的名称是​​default​​,并且可以使用该​​spring.profiles.default​​ ​​Environment​​属性进行调整,如以下示例所示:

特性

spring.profiles.default=none

​spring.profiles.active​​并且​​spring.profiles.default​​只能在非配置文件特定文档中使用。这意味着它们不能包含在配置文件特定文件或由.​​spring.config.activate.on-profile​

例如第二个文档配置无效:

特性

# this document is valid
spring.profiles.active=prod
#---
# this document is invalid
spring.config.activate.on-profile=prod
spring.profiles.active=metrics

3.1添加活动配置文件

该​​spring.profiles.active​​属性遵循与其他属性相同的排序规则:最高者​​PropertySource​​获胜。这意味着您可以在其中指定活动配置文件,​​application.properties​​然后使用命令行开关替换它们。

有时,将属性添加到活动配置文件而不是替换它们很有用。该属性可用于在由该属性​​spring.profiles.include​​激活的配置文件之上添加活动配置文件。入口点还有一个用于设置附加配置文件的 Java API ​​spring.profiles.active​​。​​SpringApplication​​请参阅SpringApplication​​setAdditionalProfiles()​​中的方法。

例如,当运行具有以下属性的应用程序时,即使使用 --spring.profiles.active 开关运行,也会激活公共和本地配置文件:

特性

spring.profiles.include[0]=common
spring.profiles.include[1]=local

如果给定的配置文件处于活动状态,则在下一节中描述的配置文件组也可用于添加活动配置文件。

3.2. 配置文件组

有时,您在应用程序中定义和使用的配置文件过于细化,使用起来很麻烦。例如,您可能拥有用于独立启用数据库和消息传递功能的配置文件​​proddb​​。​​prodmq​

为了帮助解决这个问题,Spring Boot 允许您定义配置文件组。配置文件组允许您为相关的配置文件组定义逻辑名称。

例如,我们可以创建一个​​production​​由我们的​​proddb​​和​​prodmq​​配置文件组成的组。

特性

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq

我们的应用程序现在可以启动,一​​--spring.profiles.active=production​​键激活​​production​​,​​proddb​​和​​prodmq​​配置文件。

3.3. 以编程方式设置配置文件

​SpringApplication.setAdditionalProfiles(…)​​您可以通过在应用程序运行之前调用来以编程方式设置活动配置文件。也可以使用 Spring 的​​ConfigurableEnvironment​​界面激活配置文件。

3.4. 配置文件特定的配置文件

​application.properties​​(或​​application.yml​​)和通过引用的文件的特定配置文件变体​​@ConfigurationProperties​​被视为文件并加载。有关详细信息,请参阅“配置文件特定文件”。

4. 记录

Spring Boot 使用Commons Logging进行所有内部日志记录,但保持底层日志实现打开。为Java Util Logging、Log4J2和Logback提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。

默认情况下,如果您使用“Starters”,则使用 Logback 进行日志记录。还包括适当的 Logback 路由,以确保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。

4.1日志格式

Spring Boot 的默认日志输出类似于以下示例:

2022-10-20 12:40:11.311 INFO 16138 --- [main] osbdfsMyApplication:在 PID 16138 的 myhost 上使用 Java 1.8.0_345 启动 MyApplication(/opt/apps/myapp.jar 由 myuser 在 /opt/apps/ 中启动) 
2022-10-20 12:40:11.330 INFO 16138 --- [main] osbdfsMyApplication:未设置活动配置文件,回退到 1 个默认配置文件:“默认”
2022-10-20 12:40:13.056 INFO 16138 -- - [主] osbwembedded.tomcat.TomcatWebServer:Tomcat 使用端口初始化:8080 (http)
2022-10-20 12:40:13.070 INFO 16138 --- [主] o.apache.catalina.core.StandardService:启动服务 [Tomcat]
2022-10-20 12:40:13.070 INFO 16138 --- [main] org.apache.catalina.core.StandardEngine:启动 Servlet 引擎:[Apache Tomcat/9.0.68]
2022-10-20 12:40:13.178 INFO 16138 --- [main] oaccC[Tomcat].[localhost].[/]:初始化 Spring 嵌入式 WebApplicationContext
2022-10-20 12:40:13.178 INFO 16138 --- [main] wscServletWebServerApplicationContext:Root WebApplicationContext:初始化完成在 1762 毫秒
2022-10-20 12:40:13.840 INFO 16138 --- [main] osbwembedded.tomcat.TomcatWebServer:Tomcat 在端口:8080 (http) 上启动,上下文路径为
2022-10-20 12 :40:13.850 INFO 16138 --- [main] osbdfsMyApplication:MyApplication 在 4.062 秒内启动(JVM 运行 5.452)

输出以下项目:

  • 日期和时间:毫秒精度,易于排序。
  • 日志级别:ERRORWARNINFODEBUGTRACE
  • 进程标识。
  • ​---​​用于区分实际日志消息开始的分隔符。
  • 线程名称:括在方括号中(可能会被截断以用于控制台输出)。
  • 记录器名称:这通常是源类名称(通常缩写)。
  • 日志消息。

4.2. 控制台输出

默认日志配置在写入时将消息回显到控制台。默认情况下,会记录​​ERROR​​-level、​​WARN​​-level 和​​INFO​​-level 消息。​​--debug​​您还可以通过使用标志启动应用程序来启用“调试”模式。

$ java -jar myapp.jar --debug

启用调试模式后,会配置一系列核心记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。启用调试模式不会您的应用程序配置为记录所有​​DEBUG​​级别的消息。

或者,您可以通过使用​​--trace​​标志(或​​trace=true​​在您的​​application.properties​​. 这样做可以为选择的核心记录器(嵌入式容器、Hibernate 模式生成和整个 Spring 产品组合)启用跟踪日志记录。

4.2.1颜色编码输出

如果您的终端支持 ANSI,则使用颜色输出来提高可读性。您可以设置​​spring.output.ansi.enabled​​为支持的值以覆盖自动检测。

使用​​%clr​​转换字配置颜色编码。在最简单的形式中,转换器根据日志级别为输出着色,如以下示例所示:

%clr(%5p)

下表描述了日志级别到颜色的映射:

等级

颜色

​FATAL​

红色的

​ERROR​

红色的

​WARN​

黄色

​INFO​

绿色的

​DEBUG​

绿色的

​TRACE​

绿色的

或者,您可以通过将其作为转换选项提供来指定应使用的颜色或样式。例如,要将文本变为黄色,请使用以下设置:

%clr(%dyyyy-MM-dd HH:mm:ss.SSS)yellow

支持以下颜色和样式:

  • ​blue​
  • ​cyan​
  • ​faint​
  • ​green​
  • ​magenta​
  • ​red​
  • ​yellow​

4.3. 文件输出

默认情况下,Spring Boot 仅记录到控制台,不写入日志文件。如果您想在控制台输出之外写入日志文件,您需要设置一个​​logging.file.name​​or​​logging.file.path​​属性(例如,在您的​​application.properties​​.

下表显示了如何​​logging.*​​一起使用这些属性:

表 5. 日志记录属性

​logging.file.name​

​logging.file.path​

例子

描述

(没有任何)

(没有任何)

仅控制台日志记录。

具体文件

(没有任何)

​my.log​

写入指定的日志文件。名称可以是确切的位置,也可以是相对于当前目录的位置。

(没有任何)

具体目录

​/var/log​

写入​​spring.log​​指定目录。名称可以是确切的位置,也可以是相对于当前目录的位置。

日志文件在达到 10 MB 时会旋转,并且与控制台输出一样,默认情况下会记录​​ERROR​​​-level、​​WARN​​​-level 和​​INFO​​-level 消息。

4.4. 文件轮换

​application.properties​​如果您使用的是 Logback,则可以使用您的or​​application.yaml​​文件微调日志轮换设置。对于所有其他日志记录系统,您需要自己直接配置轮换设置(例如,如果您使用 Log4J2,那么您可以添加一个​​log4j2.xml​​或​​log4j2-spring.xml​​文件)。

支持以下轮换策略属性:

姓名

描述

​logging.logback.rollingpolicy.file-name-pattern​

用于创建日志存档的文件名模式。

​logging.logback.rollingpolicy.clean-history-on-start​

如果应在应用程序启动时进行日志归档清理。

​logging.logback.rollingpolicy.max-file-size​

归档前日志文件的最大大小。

​logging.logback.rollingpolicy.total-size-cap​

在被删除之前可以占用的最大大小的日志档案。

​logging.logback.rollingpolicy.max-history​

要保留的存档日志文件的最大数量(默认为 7)。

4.5. 日志级别

所有受支持的日志记录系统都可以通过使用 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一在 Spring 中设置记录器级别(例如​​Environment​​in ​​application.properties​​) 。记录器可以使用.​​logging.level.<logger-name>=<level>​​​​level​​​​root​​​​logging.level.root​

以下示例显示了潜在的日志记录设置​​application.properties​​:

特性

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

也可以使用环境变量设置日志记录级别。例如,​​LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG​​​将设置​​org.springframework.web​​​为​​DEBUG​​。

4.6. 日志组

能够将相关的记录器组合在一起通常很有用,以便可以同时配置它们。例如,您可能通常会更改所有与 Tomcat 相关的记录器的日志记录级别,但您不容易记住顶级包。

为了解决这个问题,Spring Boot 允许您在 Spring 中定义日志记录组​​Environment​​。例如,您可以通过以下方式定义“tomcat”组,方法是将其添加到您的​​application.properties​​:

特性

logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

定义后,您可以使用一行更改组中所有记录器的级别:

特性

logging.level.tomcat=trace

Spring Boot 包括以下可开箱即用的预定义日志记录组:

姓名

记录器

网络

​org.springframework.core.codec​​​, ​​org.springframework.http​​​, ​​org.springframework.web​​​, ​​org.springframework.boot.actuate.endpoint.web​​​,​​org.springframework.boot.web.servlet.ServletContextInitializerBeans​

sql

​org.springframework.jdbc.core​​​, ​​org.hibernate.SQL​​​,​​org.jooq.tools.LoggerListener​

4.7. 使用日志关闭挂钩

为了在您的应用程序终止时释放日志记录资源,提供了一个关闭挂钩,该挂钩将在 JVM 退出时触发日志系统清理。除非您的应用程序部署为 war 文件,否则此关闭挂钩会自动注册。如果您的应用程序具有复杂的上下文层次结构,则关闭挂钩可能无法满足您的需求。如果没有,请禁用关闭挂钩并调查底层日志系统直接提供的选项。例如,Logback 提供上下文选择器,允许每个 Logger 在其自己的上下文中创建。您可以使用该​​logging.register-shutdown-hook​​属性来禁用关闭挂钩。将其设置为​​false​​将禁用注册。您可以在​​application.properties​​or​​application.yaml​​文件中设置属性:

特性

logging.register-shutdown-hook=false

4.8. 自定义日志配置

各种日志系统可以通过在类路径中包含适当的库来激活,并且可以通过在类路径的根目录或由以下 Spring​​Environment​​属性指定的位置提供合适的配置文件来进一步定制​​logging.config​​:

​org.springframework.boot.logging.LoggingSystem​​​您可以使用system 属性强制 Spring Boot 使用特定的日志记录系统。该值应该是实现的完全限定类名​​LoggingSystem​​​。您还可以使用​​none​​.

根据您的日志记录系统,将加载以下文件:

测井系统

定制

回溯

​logback-spring.xml​​​, ​​logback-spring.groovy​​​, ​​logback.xml​​​, 或​​logback.groovy​

日志4j2

​log4j2-spring.xml​​​或者​​log4j2.xml​

JDK(Java 实用程序日志记录)

​logging.properties​

为了帮助进行自定义,一些其他属性从 Spring 转移​​Environment​​到 System 属性,如下表所述:

春天环境

系统属性

注释

​logging.exception-conversion-word​

​LOG_EXCEPTION_CONVERSION_WORD​

记录异常时使用的转换字。

​logging.file.name​

​LOG_FILE​

如果已定义,它将在默认日志配置中使用。

​logging.file.path​

​LOG_PATH​

如果已定义,它将在默认日志配置中使用。

​logging.pattern.console​

​CONSOLE_LOG_PATTERN​

在控制台上使用的日志模式 (stdout)。

​logging.pattern.dateformat​

​LOG_DATEFORMAT_PATTERN​

日志日期格式的附加模式。

​logging.charset.console​

​CONSOLE_LOG_CHARSET​

用于控制台日志记录的字符集。

​logging.pattern.file​

​FILE_LOG_PATTERN​

在文件中使用的日志模式(如果​​LOG_FILE​​启用)。

​logging.charset.file​

​FILE_LOG_CHARSET​

用于文件日志记录的字符集(如果​​LOG_FILE​​启用)。

​logging.pattern.level​

​LOG_LEVEL_PATTERN​

呈现日志级别时使用的格式(默认​​%5p​​)。

​PID​

​PID​

当前进程 ID(如果可能且尚未定义为 OS 环境变量时发现)。

如果使用 Logback,还会传输以下属性:

春天环境

系统

以上是关于Spring Boot核心功能(二)的主要内容,如果未能解决你的问题,请参考以下文章

蚂蚁二面:Spring Boot 实现跨域有几种方式?

杰克逊与 Spring Boot 基于深度的序列化

在 Spring Boot 端点上使用自定义杰克逊映射器

杰克逊自定义反序列化器在 Spring Boot 中不起作用

热到让杰克逊在 Spring Boot REST API 中按需使用蛇案例/骆驼案例?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

(c)2006-2024 SYSTEM All Rights Reserved IT常识