你可能調第三方介面喜歡啟動application,修改,再啟動,再修改,順便還有個不喜歡寫JUnitTest的習慣。
你可能有一天想要在SpringBoot啟動後,立馬想要幹一些事情,現在沒有可能是你還沒遇到。
那麼SpringBoot本身提供了一個小技巧,很多人估計沒用過。
廢話不多說,先寫個service和controller展示個效果最實在。
來個簡單的service
@Service
public class TestService {
public String test() {
System.err.println("Hello,Java Body ~");
return "Hello,Java Body ~";
}
}
再來個簡單的controller
@RestController
@RequestMapping("/api")
@AllArgsConstructor
public class TestController {
private final TestService testService;
@GetMapping("/test")
public ResponseEntity test() {
return ResponseEntity.ok().body(testService.test());
}
}
接下來是不是以為要啟動調介面了,No,在SpringBoot的啟動類中加這麼個玩意兒
@SpringBootApplication
public class JavaAboutApplication {
public static void main(String[] args) {
SpringApplication.run(JavaAboutApplication.class, args);
}
@Bean
CommandLineRunner lookupTestService(TestService testService) {
return args -> {
// 1、test介面
testService.test();
};
}
}
啟動看下效果
可以發現,SpringBoot啟動後,自動載入了service的執行程式。
這個小案例是想說明什麼呢,其實就是CommandLineRunner這麼個東西。
CommandLineRunner
是一個介面,用於在Spring Boot應用程式啟動後執行一些特定的任務或程式碼塊。當應用程式啟動完成後,Spring Boot會查詢並執行實現了CommandLineRunner
介面的Bean。
說白了,就是SpringBoot啟動後,我立馬想幹的事,都可以往裡寫。
我的話,和很多廠家對接過介面,在前期不會直接開始寫業務,而是先調通介面,再接入業務中。
比如webservice這種,我曾經使用CommandLineRunner直接調對方介面來測試,還挺舒適,也節省了IDEA資源,但要注意偵錯完成後註釋掉,本地測試的時候再開啟就行。
除了可以拿來偵錯第三方介面,它還有什麼用途嗎?
其實開頭已經說過,它就是SpringBoot啟動後,你立馬想幹的事,都可以在裡面寫,所以你完全可以發揮想象去用。
我這裡,提供幾個思路作為參考。
你可以使用
CommandLineRunner
來執行應用程式啟動時的資料庫初始化操作,例如建立表格、插入初始資料等。
CommandLineRunner
在應用程式啟動後預熱快取,載入常用的資料到快取中,提高應用程式的響應速度。
載入一些外部資源,例如組態檔、靜態檔案或其他資源。
CommandLineRunner
可以幫助你在啟動時讀取這些資源並進行相應的處理。
使用
CommandLineRunner
來初始化和設定某些定時任務,確保它們在應用程式啟動後立即開始執行。
SpringBoot啟動後記錄一些必要的紀錄檔資訊,如應用程式版本、環境設定、甚至啟動時間等等,這個看具體需求。
你可能需要按照特定的順序初始化一些元件,
CommandLineRunner
可以幫助你控制初始化順序,只需要將它們新增到不同的CommandLineRunner
實現類中,並使用@Order
註解指定它們的執行順序即可。
其實,能用的地方挺多,我最後再舉個例子,netty啟動時,往往是繫結了埠並以同步形式啟動。
但如果要和SpringBoot整合,我們不可能還那麼做,而是交給SpringBoot來控制netty的啟動和關閉,當SpringBoot啟動後,netty啟動,當SpringBoot關閉時,netty自然也關閉了,這樣才比較優雅。
那麼,我們完全可以將netty的啟動執行程式放到CommandLineRunner中,這樣就可以達到目的了。
沒用過的xdm,今天學會一個新知識點了不,可以自己下去試試哦。
持續分享各種經驗,持續輸出乾貨,喜歡記得點贊+關注哦~