Spring Boot CommandLineRunner接口詳解

實際應用中,會有在項目服務啓動的時候就去加載一些數據或作一些事情的狀況。爲了解決這樣的問題,Spring Boot 爲咱們提供了一個方法,經過實現接口 CommandLineRunner 來實現,實現功能的代碼放在實現的run方法中。這段初始化代碼在整個應用生命週期內只會執行一次。
並且咱們能夠在run()方法裏使用任何依賴,由於它們已經初始化好了。java

如何使用CommandLineRunner接口

配合@Component註解使用

package com.nobody.config;

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/** * @Description * @Author Mr.nobody * @date 2020/8/27 */
@Component
@Order(value = 1)
public class ApplicationStartupRunner implements CommandLineRunner { 
 
   
    @Override
    public void run(String... args) throws Exception { 
 
   
        System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 Order=1 ----------");
    }
}

配合@SpringBootApplication註解使用

package com.nobody;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner { 
 
   

    public static void main(String[] args) { 
 
   
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception { 
 
   
        System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 ----------");
    }
}

多個CommandLineRunner實現類的執行順序問題

一個應用可能存在多個CommandLineRunner接口實現類,若是咱們想設置它們的執行順序,能夠使用 @Order實現。若是不顯示設置web

package com.nobody.config;

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/** * @Description * @Author Mr.nobody * @date 2020/8/27 */
@Component
@Order(value = 2)
public class ApplicationOrderStartupRunner implements CommandLineRunner { 
 
   
    @Override
    public void run(String... args) throws Exception { 
 
   
        System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 Order=2 ----------");
    }
}

啓動服務,能夠在控制檯看到在Spring Boot啓動完以後,執行了多個定義的CommandLineRunner實現類的run方法,而且按@Order註解設置的順序執行。
在這裏插入圖片描述spring

注意:在實現CommandLineRunner接口時,run(String… args)方法內部若是拋異常的話,會直接致使應用啓動失敗,因此,必定要記得將危險的代碼放在try-catch代碼塊裏。ide

本文同步分享在 博客「Μr.ηobοdy」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。svg

相關文章
相關標籤/搜索