首頁 > Java > java教程 > Springboot啟動後怎麼執行

Springboot啟動後怎麼執行

WBOY
發布: 2023-06-03 11:21:39
轉載
972 人瀏覽過

一、註解@PostConstruct

使用註解@PostConstruct是最常見的一種方式,存在的問題是如果執行的方法耗時過長,會導致專案在方法執行期間無法提供服務。

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

    @PostConstruct
    public void init() throws InterruptedException {
        Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务
        System.out.println(123456);
    }
}
登入後複製

二、CommandLineRunner介面

實作CommandLineRunner介面然後在run方法裡面呼叫需要呼叫的方法即可,好處是方法執行時,專案已經初始化完畢,是可以正常提供服務的。

同時此方法也可以接受參數,可以根據專案啟動時: java -jar demo.jar arg1 arg2 arg3 傳入的參數進行一些處理。

@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介面都不影響服務,都可以正常提供服務,注意監聽的事件,通常是ApplicationStartedEvent 或ApplicationReadyEvent,其他的事件可能無法注入bean。

@Component
public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {
    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("listener");
    }
}
登入後複製

五、四種方式的執行順序

註解方式@PostConstruct 總是先執行

如果監聽的是ApplicationStartedEvent 事件,則一定會在CommandLineRunner和ApplicationRunner 之前執行。

如果監聽的是ApplicationReadyEvent 事件,一定會在CommandLineRunner和ApplicationRunner 之後執行。

CommandLineRunner和ApplicationRunner 預設是ApplicationRunner先執行,如果雙方指定了@Order 則按照@Order的大小順序執行,大的先執行。

以上是Springboot啟動後怎麼執行的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板