欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot啟動后立即某個執(zhí)行方法的四種方式

 更新時間:2022年06月02日 14:51:05   作者:光滑的禿頭  
spring項目如何在啟動項目是執(zhí)行一些操作,在spring中能通過那些操作實現這個功能呢,下面這篇文章主要給大家介紹了關于Springboot啟動后立即某個執(zhí)行方法的四種方式,需要的朋友可以參考下

最新需要在項目啟動后立即執(zhí)行某個方法,然后特此記錄下找到的四種方式

注解@PostConstruct

使用注解@PostConstruct是最常見的一種方式,存在的問題是如果執(zhí)行的方法耗時過長,會導致項目在方法執(zhí)行期間無法提供服務。

@Component
public class StartInit {
//
//    @Autowired   可以注入bean
//    ISysUserService userService;

    @PostConstruct
    public void init() throws InterruptedException {
        Thread.sleep(10*1000);//這里如果方法執(zhí)行過長會導致項目一直無法提供服務
        System.out.println(123456);
    }
}

CommandLineRunner接口

實現CommandLineRunner接口 然后在run方法里面調用需要調用的方法即可,好處是方法執(zhí)行時,項目已經初始化完畢,是可以正常提供服務的。

同時該方法也可以接受參數,可以根據項目啟動時: java -jar demo.jar arg1 arg2 arg3 傳入的參數進行一些處理。詳見: Spring boot CommandLineRunner啟動任務傳參

@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println(Arrays.toString(args));
    }
}

實現ApplicationRunner接口

實現ApplicationRunner接口和實現CommandLineRunner接口基本是一樣的。

唯一的不同是啟動時傳參的格式,CommandLineRunner對于參數格式沒有任何限制,ApplicationRunner接口參數格式必須是:–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());
        }
    }
}

實現ApplicationListener

實現接口ApplicationListener方式和實現ApplicationRunner,CommandLineRunner接口都不影響服務,都可以正常提供服務,注意監(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 事件,則一定會在CommandLineRunner和ApplicationRunner 之前執(zhí)行。

如果監(jiān)聽的是ApplicationReadyEvent 事件,則一定會在CommandLineRunner和ApplicationRunner 之后執(zhí)行。

CommandLineRunner和ApplicationRunner 默認是ApplicationRunner先執(zhí)行,如果雙方指定了@Order 則按照@Order的大小順序執(zhí)行,大的先執(zhí)行。

總結

到此這篇關于Springboot啟動后立即某個執(zhí)行方法的四種方式的文章就介紹到這了,更多相關Springboot啟動后執(zhí)行方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設計和實現

    基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設計和實現

    項目使用Java swing+mysql開發(fā),可實現基礎數據維護、用戶登錄注冊、社團信息列表查看、社團信息添加、社團信息修改、社團信息刪除以及退出注銷等功能、界面設計比較簡單易學、適合作為Java課設設計以及學習技術使用,需要的朋友參考下吧
    2021-08-08
  • 十分鐘速懂java知識點 System類

    十分鐘速懂java知識點 System類

    這篇文章主要介紹了java知識點System類,根據一次面試總結的,可以十分鐘速懂System類,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Spring框架設值注入操作實戰(zhàn)案例分析

    Spring框架設值注入操作實戰(zhàn)案例分析

    這篇文章主要介紹了Spring框架設值注入操作,結合具體實例形式分析了spring框架設值注入相關實現與使用方法,需要的朋友可以參考下
    2019-11-11
  • 微信開發(fā)--自定義菜單查詢返碼亂碼的解決方法

    微信開發(fā)--自定義菜單查詢返碼亂碼的解決方法

    本篇文章主要介紹了微信開發(fā)--自定義菜單查詢返碼亂碼的解決方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 深入理解spring的AOP機制原理

    深入理解spring的AOP機制原理

    本篇文章主要介紹了深入理解spring的AOP機制原理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Spring框架AOP基礎之代理模式詳解

    Spring框架AOP基礎之代理模式詳解

    代理模式(Proxy Parttern)為一個對象提供一個替身,來控制這個對象的訪問,即通過代理對象來訪問目標對象。本文將通過示例詳細講解一下這個模式,需要的可以參考一下
    2022-11-11
  • Java多線程三種主要實現方式解析

    Java多線程三種主要實現方式解析

    這篇文章主要介紹了Java多線程三種主要實現方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • springMVC獲取請求參數的幾種方式匯總

    springMVC獲取請求參數的幾種方式匯總

    在日常使用SpringMVC進行開發(fā)的時候,有可能遇到前端各種類型的請求參數,這里做一次相對全面的總結,下面這篇文章主要給大家介紹了關于springMVC獲取請求參數的幾種方式,需要的朋友可以參考下
    2022-04-04
  • 基于SpringBoot+Avue實現短信通知功能

    基于SpringBoot+Avue實現短信通知功能

    Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數據驅動UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實現短信通知功能,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • 詳解java.lang.reflect.Modifier.isInterface()方法

    詳解java.lang.reflect.Modifier.isInterface()方法

    這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關資料,這里提供實例幫助大家理解這個方法的使用,需要的朋友可以參考下
    2017-09-09

最新評論