Springboot啟動(dòng)后立即某個(gè)執(zhí)行方法的四種方式
最新需要在項(xiàng)目啟動(dòng)后立即執(zhí)行某個(gè)方法,然后特此記錄下找到的四種方式
注解@PostConstruct
使用注解@PostConstruct是最常見的一種方式,存在的問題是如果執(zhí)行的方法耗時(shí)過長(zhǎng),會(huì)導(dǎo)致項(xiàng)目在方法執(zhí)行期間無法提供服務(wù)。
@Component public class StartInit { // // @Autowired 可以注入bean // ISysUserService userService; @PostConstruct public void init() throws InterruptedException { Thread.sleep(10*1000);//這里如果方法執(zhí)行過長(zhǎng)會(huì)導(dǎo)致項(xiàng)目一直無法提供服務(wù) System.out.println(123456); } }
CommandLineRunner接口
實(shí)現(xiàn)CommandLineRunner接口 然后在run方法里面調(diào)用需要調(diào)用的方法即可,好處是方法執(zhí)行時(shí),項(xiàng)目已經(jīng)初始化完畢,是可以正常提供服務(wù)的。
同時(shí)該方法也可以接受參數(shù),可以根據(jù)項(xiàng)目啟動(dòng)時(shí): java -jar demo.jar arg1 arg2 arg3 傳入的參數(shù)進(jìn)行一些處理。詳見: Spring boot CommandLineRunner啟動(dòng)任務(wù)傳參
@Component public class CommandLineRunnerImpl implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println(Arrays.toString(args)); } }
實(shí)現(xiàn)ApplicationRunner接口
實(shí)現(xiàn)ApplicationRunner接口和實(shí)現(xiàn)CommandLineRunner接口基本是一樣的。
唯一的不同是啟動(dòng)時(shí)傳參的格式,CommandLineRunner對(duì)于參數(shù)格式?jīng)]有任何限制,ApplicationRunner接口參數(shù)格式必須是:–key=value
@Component public class ApplicationRunnerImpl implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { Set<String> optionNames = args.getOptionNames(); for (String optionName : optionNames) { List<String> values = args.getOptionValues(optionName); System.out.println(values.toString()); } } }
實(shí)現(xiàn)ApplicationListener
實(shí)現(xiàn)接口ApplicationListener方式和實(shí)現(xiàn)ApplicationRunner,CommandLineRunner接口都不影響服務(wù),都可以正常提供服務(wù),注意監(jiān)聽的事件,通常是ApplicationStartedEvent 或者ApplicationReadyEvent,其他的事件可能無法注入bean。
@Component public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("listener"); } }
四種方式的執(zhí)行順序
注解方式@PostConstruct 始終最先執(zhí)行
如果監(jiān)聽的是ApplicationStartedEvent 事件,則一定會(huì)在CommandLineRunner和ApplicationRunner 之前執(zhí)行。
如果監(jiān)聽的是ApplicationReadyEvent 事件,則一定會(huì)在CommandLineRunner和ApplicationRunner 之后執(zhí)行。
CommandLineRunner和ApplicationRunner 默認(rèn)是ApplicationRunner先執(zhí)行,如果雙方指定了@Order 則按照@Order的大小順序執(zhí)行,大的先執(zhí)行。
總結(jié)
到此這篇關(guān)于Springboot啟動(dòng)后立即某個(gè)執(zhí)行方法的四種方式的文章就介紹到這了,更多相關(guān)Springboot啟動(dòng)后執(zhí)行方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解SpringBoot啟動(dòng)項(xiàng)目后執(zhí)行方法的幾種方式
- SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié)
- SpringBoot實(shí)現(xiàn)啟動(dòng)項(xiàng)目后立即執(zhí)行的方法總結(jié)
- springboot項(xiàng)目啟動(dòng)后執(zhí)行方法的三種方式
- SpringBoot啟動(dòng)時(shí)自動(dòng)執(zhí)行代碼的幾種實(shí)現(xiàn)方式
- springboot啟動(dòng)前執(zhí)行方法的四種方式總結(jié)
- Springboot啟動(dòng)執(zhí)行特定代碼的方式匯總
- springboot 項(xiàng)目容器啟動(dòng)后如何自動(dòng)執(zhí)行指定方法
- Springboot項(xiàng)目啟動(dòng)成功后可通過五種方式繼續(xù)執(zhí)行
相關(guān)文章
基于JavaSwing+mysql開發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)
項(xiàng)目使用Java swing+mysql開發(fā),可實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)維護(hù)、用戶登錄注冊(cè)、社團(tuán)信息列表查看、社團(tuán)信息添加、社團(tuán)信息修改、社團(tuán)信息刪除以及退出注銷等功能、界面設(shè)計(jì)比較簡(jiǎn)單易學(xué)、適合作為Java課設(shè)設(shè)計(jì)以及學(xué)習(xí)技術(shù)使用,需要的朋友參考下吧2021-08-08十分鐘速懂java知識(shí)點(diǎn) System類
這篇文章主要介紹了java知識(shí)點(diǎn)System類,根據(jù)一次面試總結(jié)的,可以十分鐘速懂System類,感興趣的小伙伴們可以參考一下2015-12-12Spring框架設(shè)值注入操作實(shí)戰(zhàn)案例分析
這篇文章主要介紹了Spring框架設(shè)值注入操作,結(jié)合具體實(shí)例形式分析了spring框架設(shè)值注入相關(guān)實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2019-11-11springMVC獲取請(qǐng)求參數(shù)的幾種方式匯總
在日常使用SpringMVC進(jìn)行開發(fā)的時(shí)候,有可能遇到前端各種類型的請(qǐng)求參數(shù),這里做一次相對(duì)全面的總結(jié),下面這篇文章主要給大家介紹了關(guān)于springMVC獲取請(qǐng)求參數(shù)的幾種方式,需要的朋友可以參考下2022-04-04基于SpringBoot+Avue實(shí)現(xiàn)短信通知功能
Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數(shù)據(jù)驅(qū)動(dòng)UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實(shí)現(xiàn)短信通知功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09詳解java.lang.reflect.Modifier.isInterface()方法
這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關(guān)資料,這里提供實(shí)例幫助大家理解這個(gè)方法的使用,需要的朋友可以參考下2017-09-09