第三單元SpringBoot日誌,集成測試,定時器,過濾器,servlet配置
1【授課重點】
1)SpringBoot日誌,
2)SpringBoot過濾器,
3)SpringBoot攔截器,
4)定時器,
2【考覈要求】
1)SpringBoot攔截器,
2)SpringBoot過濾器,
3)SpringBoot默認日誌,
3【教學內容】
3.1課程導入
一、爲何要有SpringBoot攔截器
二、爲何要有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格式顯示在下面給出的屏幕截圖中。java
它提供如下信息 -
提供日誌日期和時間的日期和時間。
日誌級別顯示有: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。spring
使用下面顯示的屬性指定本身的日誌文件名app
注意 - 文件將在達到10MB後自動旋轉生成。
3.6日誌級別
Spring Boot支持全部記錄器級別,例如:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。在application.properties 文件中定義Root logger,以下所示post
注 - 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文件中定義日誌模式。還使用下面給出的代碼在控制檯或文件日誌附加程序中定義支持的日誌模式集spa
完整的logback.xml文件的代碼以下所示。必須將其放在類路徑中。線程
下面給出的代碼顯示瞭如何在Spring Boot主類文件中添加slf4j logger。debug
在控制檯窗口中看到的輸出顯示在此處
在此處顯示日誌文件中顯示的輸出
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響應。下面給出的代碼是請求正文