第三单元 SpringBoot 日志,集成测试,定时器,过滤器,servlet 配置
1【授课重点】
1)SpringBoot 日志,
2)SpringBoot 过滤器,
3)SpringBoot 拦截器,
4) 定时器,
2【考核要求】
1)SpringBoot 拦截器,
2)SpringBoot 过滤器,
3)SpringBoot 默认日志,
3【教学内容】
3.1 课程导入
1、为什么要有 SpringBoot 拦截器
2、为什么要有 SpringBoot 单元测试
3.2SpringBoot 日志
Spring Boot 使用 Apache Commons 日志记录进行所有内部日志记录。Spring Boot 的默认配置支持使用 Java Util Logging,Log4j2 和 Logback。使用这些,可以配置控制台日志记录以及文件日志记录。
如果使用的是 Spring Boot Starters,Logback 将为日志记录提供良好的支持。此外,Logback 还提供对 Common Logging,Util Logging,Log4J 和 SLF4J 的良好支持。
3.3 日志格式
默认的 Spring Boot Log 格式显示在下面给出的屏幕截图中。
它提供以下信息 –
提供日志日期和时间的日期和时间。
日志级别显示有:INFO,ERROR 或 WARN。
进程 ID。
— 是一个分隔符。
线程名称括在方括号 [] 中。
记录器名称,显示源类名称。
日志消息。
3.4 控制台日志输出
默认日志消息将打印到控制台窗口。默认情况下,INFO,ERROR 和 WARN 日志消息将打印在日志文件中。
如果必须启用调试级别日志,请使用以下命令在启动应用程序时添加调试标志 –
java –jar demo.jar –debug
还可以将调试模式添加到 application.properties 文件中,如下所示 –
debug = true
3.5 文件日志输出
默认情况下,所有日志都将在控制台窗口中打印,而不是在文件中打印。如果要在文件中打印日志,则需要在 application.properties 文件中设置属性 logging.file 或 logging.path。
可以使用下面显示的属性指定日志文件路径。请注意,日志文件名是 spring.log。
使用下面显示的属性指定自己的日志文件名
注意 – 文件将在达到 10MB 后自动旋转生成。
3.6 日志级别
Spring Boot 支持所有记录器级别,例如:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。在 application.properties 文件中定义 Root logger,如下所示
注 – Logback 不支持“FATAL”级别日志。它映射到“ERROR”级别日志。
3.7 配置 Logback
Logback 支持基于 XML 的配置来处理 Spring Boot Log 配置。日志配置详细信息在 logback.xml 文件中配置。logback.xml 文件应放在 classpath 下。
可以使用下面给出的代码在 Logback.xml 文件中配置 ROOT 级别日志
在下面给出的 Logback.xml 文件中配置控制台 appender。
使用下面给出的代码在 Logback.xml 文件中配置文件 appender。请注意,需要在文件追加器中指定日志文件路径。
使用下面给出的代码在 logback.xml 文件中定义日志模式。还使用下面给出的代码在控制台或文件日志附加程序中定义支持的日志模式集
完整的 logback.xml 文件的代码如下所示。必须将其放在类路径中。
下面给出的代码显示了如何在 Spring Boot 主类文件中添加 slf4j logger。
在控制台窗口中看到的输出显示在此处
在此处显示日志文件中显示的输出
3.8Spring Boot 异常处理
处理 API 中的异常和错误并向客户端发送适当的响应对企业应用程序有利。在本章中,将学习如何在 Spring Boot 中处理异常。
在继续进行异常处理之前,了解以下注解。
3.8.1 控制器 Advice
@ControllerAdvice 是一个注解,用于全局处理异常。
3.8.2 异常处理程序
@ExceptionHandler 是一个注释,用于处理特定异常并将自定义响应发送到客户端。使用以下代码创建 @ControllerAdvice 类来全局处理异常
定义一个扩展 RuntimeException 类的子类。
可以定义 @ExceptionHandler 方法来处理异常,如图所示。此方法应用于编写 Controller Advice 类文件。
现在,使用下面给出的代码从 API 中抛出异常。
3.9Spring Boot 拦截器
在 Spring Boot 中使用拦截器,可在以下情况下执行操作 –
在将请求发送到控制器之前
在将响应发送给客户端之前
例如,使用拦截器在将请求发送到控制器之前添加请求标头,并在将响应发送到客户端之前添加响应标头。
要使用拦截器,需要创建支持它的 @Component 类,它应该实现 HandlerInterceptor 接口。
以下是在拦截器上工作时应该了解的三种方法 –
preHandle()方法 – 用于在将请求发送到控制器之前执行操作。此方法应返回 true,以将响应返回给客户端。
postHandle()方法 – 用于在将响应发送到客户端之前执行操作。
afterCompletion()方法 – 用于在完成请求和响应后执行操作。
请注意以下代码以便更好地理解
必须使用 WebMvcConfigurerAdapter 向 InterceptorRegistry 注册此 Interceptor,如下所示
在下面给出的示例中,将使用 GET 产品 API,该 API 提供的输出如下 –
Interceptor 类 ProductServiceInterceptor.java 的代码如下
应用程序配置类文件的代码将拦截器注册到拦截器注册表,ProductServiceInterceptorAppConfig.java 如下
Spring Boot 应用程序类主要的文件 DemoApplication.java 的代码如下
–ProductServiceInterceptor 类如果不用 @Component 注解可以吗?
– 如果不用 @Component 注解,那么应该如何使用?
– 请尝试着把这个案例修改为不用 @Component 注解的形式?
3.10Spring Boot Servlet 过滤器
过滤器是用于拦截应用程序的 HTTP 请求和响应的对象。通过使用过滤器,可以在两个实例上执行两个操作 –
在将请求发送到控制器之前
在向客户发送响应之前。
以下代码显示了带有 @Component 注解的 Servlet 过滤器实现类的示例代码。
以下示例显示了在将请求发送到控制器之前从 ServletRequest 对象读取远程主机和远程地址的代码。
在 doFilter()方法中,添加了 System.out.println()语句来打印远程主机和远程地址
在 Spring Boot 主应用程序类文件中,添加了返回“Hello World”字符串的简单 REST 端点。
3.11Spring Boot Rest 模板(Rest 请求是不是重点)
Rest 模板用于创建使用 RESTful Web 服务的应用程序。使用 exchange()方法为所有 HTTP 方法使用 Web 服务。下面给出的代码显示了如何创建 Rest 模板 Bean 以自动连接 Rest 模板对象。
3.11.1GET
通过使用 RestTemplate 类的 exchange()方法来使用 GET API,
假设此 URL => http://localhost:8080/products 返回以下 JSON,将使用以下代码使用 Rest Template 来使用此 API 响应
必须遵循给定的点来使用 API –
自动装配 Rest 模板对象。
使用 HttpHeaders 设置请求标头。
使用 HttpEntity 包装请求对象。
为 Exchange()方法提供 URL,HttpMethod 和 Return 类型。
3.11.2Post
通过使用 RestTemplate 的 exchange()方法来使用 POST API
假设此 URL => http://localhost:8080/products 返回如下所示的响应,使用 Rest 模板测试此 API 响应。
下面给出的代码是请求正文