springboot啟動加載CommandLineRunner @PostConstruct問題
springboot 啟動加載
CommandLineRunner
在項目中,經(jīng)常有這樣的需求,我們需要在項目啟動完立即初始化一些數(shù)據(jù)(比如緩存等),以便后面調(diào)用使用。spring boot可以通過CommandLineRunner接口實現(xiàn)啟動加載功能。
新建一個Java文件,類需要用Component聲明下,需要實現(xiàn)CommandLineRunner接口,然后重寫run方法,在run方法內(nèi)編寫需要加載的內(nèi)容。
代碼如下:
package com.study.test.startup; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; /** * @Description: 初始化啟動類 * @Author: chen * @Date: Created in 2019/2/22 */ @Component public class InitStarter implements CommandLineRunner{ @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner example start"); } }
啟動項目,運行結(jié)果證明:CommandLineRunner會在服務(wù)啟動之后被立即執(zhí)行
在項目中,我們可以寫一個類繼承CommandLineRunner接口,然后在實現(xiàn)方法中寫多個需要加載的方法,也可以寫多個類繼承CommandLineRunner,這些類之間,可以通過order注解(@Order(value=1))實現(xiàn)先后順序。
例子如下:
總結(jié):
- CommandLineRunner會在服務(wù)啟動之后被立即執(zhí)行。
- CommandLineRunner可以有多個,且多個直接可以用order注解進(jìn)行排序。
@PostConstruct
另一個需求是,在類加載的時候,為當(dāng)前類初始化一些數(shù)據(jù),那么可以使用@PostConstruct注解。
Servlet中增加了兩個影響Servlet生命周期的注解,@PostConstruct和@PreDestroy,這兩個注解被用來修飾一個非靜態(tài)的void()方法。
在一個類內(nèi),如果有構(gòu)造器(Constructor ),有@PostConstruct,還有@Autowired,他們的先后執(zhí)行順序為Constructor >> @Autowired >> @PostConstruct。
因為一個有聲明注解的類文件(必須有聲明,這樣在項目初始化時候才會注入),在項目啟動后,會對對象進(jìn)行依賴注入,而初始化的動作會依賴于對象,所以假象上看,也類似于項目啟動就會執(zhí)行的操作,因此,我們也可以通過這樣的形式,對數(shù)據(jù)進(jìn)行初始化。
說明一下:
@PostConstruct更針對性于當(dāng)前類文件,而CommandLineRunner更服務(wù)于整個項目。所以在我們使用中,可根據(jù)自己的使用場景來進(jìn)行選擇用這兩種方式來實現(xiàn)初始化。
package com.study.test.postConstruct; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * @Description: * @Author: chen * @Date: Created in 2019/2/25 */ @Component public class Init { @PostConstruct private void init(){ System.out.println("PostConstruct 注解 初始化數(shù)據(jù)."); } }
執(zhí)行結(jié)果:
說明一下:
執(zhí)行結(jié)果可以看到,在項目還沒有啟動成功的時候,@PostConstruct已經(jīng)執(zhí)行完了,因為@PostConstruct是在Init類注入完成后立馬執(zhí)行的,它并不依賴于項目的啟動。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- springboot中@PostConstruct注解使用小結(jié)
- SpringBoot中@PostConstruct 注解的實現(xiàn)
- SpringBoot中的@PostConstruct注解詳細(xì)解析
- SpringBoot使用@PostConstruct注解導(dǎo)入配置方式
- springboot?@PostConstruct無效的解決
- 淺談SpringBoot中的Bean初始化方法?@PostConstruct
- SpringBoot @PostConstruct和@PreDestroy的使用說明
- SpringBoot @PostConstruct原理用法解析
- SpringBoot中多個PostConstruct注解執(zhí)行順序控制
相關(guān)文章
datatables 帶查詢條件java服務(wù)端分頁處理實例
本篇文章主要介紹了datatables 帶查詢條件java服務(wù)端分頁處理實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Resty開發(fā)restful版本的Jfinal深入研究
這篇文章主要為大家介紹了Resty開發(fā)restful版本的Jfinal深入研究有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Java中Json與List、Map、entity的互相轉(zhuǎn)化
在開發(fā)中,Json轉(zhuǎn)換的場景往往也就是那么幾個,本文主要介紹了Java中Json與List、Map、entity的互相轉(zhuǎn)化,具有一定的參考價值,感興趣的可以了解一下2022-07-07Java利用redis zset實現(xiàn)延時任務(wù)詳解
zset作為redis的有序集合數(shù)據(jù)結(jié)構(gòu)存在,排序的依據(jù)就是score。本文就將利用zset score這個排序的這個特性,來實現(xiàn)延時任務(wù),感興趣的可以了解一下2022-08-08Java Thread之Sleep()使用方法總結(jié)
這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)
下面小編就為大家?guī)硪黄狫ava內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04