AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

請一定掌握SpringBoot這四個高級開發技巧

來源: 責編: 時間:2024-06-14 08:46:27 145觀看
導讀環境:SpringBoot3.2.51. 輸出所有Controller接口信息有時,為了更便捷地排查問題,我們可能希望在容器啟動時能夠打印出當前項目中所有的Controller接口信息。這樣做可以提供一個清晰的項目接口概覽,從而幫助我們更快速地定

環境:SpringBoot3.2.51bK28資訊網——每日最新資訊28at.com

1. 輸出所有Controller接口信息

有時,為了更便捷地排查問題,我們可能希望在容器啟動時能夠打印出當前項目中所有的Controller接口信息。這樣做可以提供一個清晰的項目接口概覽,從而幫助我們更快速地定位和解決可能出現的問題。1bK28資訊網——每日最新資訊28at.com

方式1

logging:  level:    web: trace

輸出結果1bK28資訊網——每日最新資訊28at.com

圖片圖片1bK28資訊網——每日最新資訊28at.com

雖然達到了目的,但是這將所有web分組的日志都進行輸出了,日志信息非常多,我們所期望的僅僅是輸出Controller相關的信息。1bK28資訊網——每日最新資訊28at.com

方式2

logging:  level:    '[_org.springframework.web.servlet.HandlerMapping.Mappings]': debug

輸出結果1bK28資訊網——每日最新資訊28at.com

圖片圖片1bK28資訊網——每日最新資訊28at.com

通過上面的設置,此時日志信息只輸出了Controller接口,其它的都按照默認的輸出。1bK28資訊網——每日最新資訊28at.com

2. 統計接口調用耗時

一般我們在不借助第三方工具的情況下,打印接口耗時通常會在接口處理邏輯的開始和結束位置分別記錄當前時間戳,然后計算時間差來獲取耗時,如下示例:1bK28資訊網——每日最新資訊28at.com

@GetMapping("/time")public Object time() throws Exception {  Instant startTime = Instant.now() ;  // TODO, 業務操作  System.err.printf("接口耗時: %d 毫秒%n", (Duration.between(startTime, Instant.now()).toMillis())) ;  return "take time" ;}

上面統計了耗時情況,但是不夠準確,為了更準確地反應處整個請求處理過程的耗時,包括Spring框架根據請求查找對應的Controller、攔截器執行等操作,SpringMVC在這些過程執行完成后是發布了一個事件,我們可以通過監聽該事件來獲取整個請求生命周期的耗時,如下示例:1bK28資訊網——每日最新資訊28at.com

@Componentpublic class TakeTimeCountListener implements ApplicationListener<ServletRequestHandledEvent> {  @Override  public void onApplicationEvent(ServletRequestHandledEvent event) {    Throwable failureCause = event.getFailureCause() ;    if (failureCause != null) {      System.err.printf("錯誤原因: %s%n", failureCause.getMessage()) ;    }    System.err.printf("請求客戶端地址:%s, 請求URL: %s, 請求Method: %s, 請求耗時: %d%n",         event.getClientAddress(),         event.getRequestUrl(),         event.getMethod(),        event.getProcessingTimeMillis()) ;  }}

通過監聽ServletRequestHandledEvent事件,可以有效的獲取客戶端地址,請求的URL等完整的信息,其中ProcessingTimeMillis屬性反應的就是這個請求耗時情況。1bK28資訊網——每日最新資訊28at.com

圖片圖片1bK28資訊網——每日最新資訊28at.com

是不是非常的方便及準確!1bK28資訊網——每日最新資訊28at.com

3. 動態注冊靜態資源

通常情況下,一般都是在配置文件中或者自定義WebMvcConfigurer進行靜態資源的配置及注冊,如下示例:1bK28資訊網——每日最新資訊28at.com

spring:  web:    resources:      static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

以上是默認的路徑,我們可以在這自定義自己的今天資源路徑。如下添加文件系統目錄1bK28資訊網——每日最新資訊28at.com

spring:  web:    resources:      static-locations: ..., file:///d:/images/

也可以通過編程的方式注冊靜態資源1bK28資訊網——每日最新資訊28at.com

public class WebConfig implements WebMvcConfigurer {  public void addResourceHandlers(ResourceHandlerRegistry registry) {    registry.addResourceHandler("/images/**").addResourceLocations("file:///d://images//") ;  }}

以上方式都是實現配置或代碼中定義好,這都需要重啟服務,無法做到實時生效。要想實時生效可以通過如下方式動態注冊1bK28資訊網——每日最新資訊28at.com

@RestControllerpublic class RegController {  @Resource  private SimpleUrlHandlerMapping resourceHandlerMapping ;  @Resource  private ApplicationContext context ;  // 如:requestURI=/s/**, path=d:/images/  @GetMapping("")  public Object reg(String requestURI, String path) throws Throwable {    ResourceHttpRequestHandler handler = new ResourceHttpRequestHandler();    handler.setLocations(List.of(new FileSystemResource(path))) ;    handler.setApplicationContext(context) ;    handler.afterPropertiesSet() ;    resourceHandlerMapping.registerHandler(requestURI, handler);    return "register success";  }}

通過如上方式動態注冊靜態資源,你也可以對相應的靜態資源進行刪除。1bK28資訊網——每日最新資訊28at.com

4. 容器啟動完成操作

當你希望Spring容器正確初始化加載完成以后,執行一些操作,那么你可以監聽ContextRefreshedEvent事件。該實際的觸發是在refresh方法執行的最后階段。1bK28資訊網——每日最新資訊28at.com

@Componentpublic class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {  @Override  public void onApplicationEvent(ContextRefreshedEvent event) {    System.out.println("上下文刷新完成...") ;    // TODO  }}

通過監聽該事件,你可以在這里實現你自己的邏輯。1bK28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-93678-0.html請一定掌握SpringBoot這四個高級開發技巧

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 實力與顏值并存,華為 PC 雙新品榮登 CHIP 榜單前三

下一篇: 對比Word和Markdown,為什么LaTeX更受專業人士歡迎

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top