SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié)
經(jīng)過整理后得到以下幾種常用方式,供大家參考。
1. 使用過濾器
init() :該方法在tomcat容器啟動(dòng)初始化過濾器時(shí)被調(diào)用,它在 Filter 的整個(gè)生命周期只會(huì)被調(diào)用一次??梢栽谶@個(gè)方法中補(bǔ)充想要執(zhí)行的內(nèi)容。
@Component public class MyFilter implements Filter { /** * init() :該方法在tomcat容器啟動(dòng)初始化過濾器時(shí)被調(diào)用,它在 Filter 的整個(gè)生命周期只會(huì)被調(diào)用一次。 * doFilter() :容器中的每一次請(qǐng)求都會(huì)調(diào)用該方法, FilterChain(放行) 用來(lái)調(diào)用下一個(gè)過濾器 Filter。 * destroy(): 當(dāng)容器銷毀過濾器實(shí)例時(shí)調(diào)用該方法,在方法中銷毀或關(guān)閉資源,在過濾器 Filter 的整個(gè)生命周期也只會(huì)被調(diào)用一次。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter 前置"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Filter 處理中"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("Filter 后置"); } }
2.實(shí)現(xiàn)InitializingBean接口,代碼如下:
@Component public class MyInitStart2 implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("在MyInitStart2中添加初始下方法"); } }
3.實(shí)現(xiàn)ApplicationListener接口,代碼如下:
@Component public class MyInitStart3 implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("在MyInitStart3中添加初始下方法"); } }
4.實(shí)現(xiàn)ApplicationRunner接口,代碼如下:
@Component public class MyInitStart4 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("在MyInitStart4中添加初始下方法"); } }
5.實(shí)現(xiàn)CommandLineRunner接口,代碼如下:
@Component public class MyInitStart5 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("在MyInitStart5中添加初始下方法"); } }
6.使用@PostConstruct注解,代碼如下:
@Component public class MyInitStart6 { @PostConstruct public void run() { System.out.println("在MyInitStart6中添加初始下方法"); } }
7.直接在啟動(dòng)類下面調(diào)用方法
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { ConfigurableApplicationContext run = SpringApplication.run(YabaoApplication.class, args); System.out.println("在啟動(dòng)類添加初始下方法"); }
其實(shí)我們也可以使用springboot定時(shí)器@Scheduled進(jìn)行實(shí)現(xiàn),啟動(dòng)后就去執(zhí)行一次。
我們看下以上其中方法打印的順序:
看到打印的信息后我們可以發(fā)現(xiàn)他們的執(zhí)行順序,filter是在最前面的。這幾種方法經(jīng)常會(huì)被用到,當(dāng)我們的項(xiàng)目啟動(dòng)后需要調(diào)用對(duì)應(yīng)的方法,用來(lái)項(xiàng)目的初始化等。
到此這篇關(guān)于SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的幾種方式的文章就介紹到這了,更多相關(guān)SpringBoot啟動(dòng)執(zhí)行任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
- SpringBoot啟動(dòng)時(shí)執(zhí)行初始化操作的幾種方式
- SpringBoot啟動(dòng)時(shí)自動(dòng)執(zhí)行指定方法的幾種實(shí)現(xiàn)方式
- Springboot項(xiàng)目啟動(dòng)成功后可通過五種方式繼續(xù)執(zhí)行
- 詳解SpringBoot啟動(dòng)項(xiàng)目后執(zhí)行方法的幾種方式
- SpringBoot啟動(dòng)后執(zhí)行方法的五種實(shí)現(xiàn)方式
相關(guān)文章
Spring Batch遠(yuǎn)程分區(qū)的本地Jar包模式的代碼詳解
這篇文章主要介紹了Spring Batch遠(yuǎn)程分區(qū)的本地Jar包模式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫(kù)存儲(chǔ))
這篇文章主要為大家詳細(xì)介紹了相冊(cè)管理系統(tǒng)的實(shí)現(xiàn)步驟,Java表單的文件上傳和下載,xml數(shù)據(jù)庫(kù)存儲(chǔ)信息,感興趣的小伙伴們可以參考一下2016-07-07Java實(shí)現(xiàn)動(dòng)物換位游戲完整?過程詳解
大家好,今天嘗試用Java編程設(shè)計(jì)一個(gè)GUI界面的動(dòng)物換位游戲,游戲的結(jié)果是讓左右兩組的動(dòng)物交換位置,以下是具體設(shè)計(jì)過程,供大家參考2022-07-07Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法
最近公司的項(xiàng)目中需要操作pdf文件,所以這里給大家總結(jié)下方法,這篇文章主要給大家介紹了關(guān)于Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09struts2中通過json傳值解決亂碼問題的實(shí)現(xiàn)方法
這篇文章主要介紹了struts2中通過json傳值解決亂碼問題的實(shí)現(xiàn)方法,涉及js編碼及java解碼的相關(guān)操作技巧,需要的朋友可以參考下2016-06-06Java項(xiàng)目打包發(fā)布到maven私倉(cāng)常見的幾種方式
這篇文章主要介紹了項(xiàng)目打包發(fā)布到maven私倉(cāng)常見的幾種方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03