1. 程式人生 > >SpringBoot之CommandLineRunner介面和ApplicationRunner介面

SpringBoot之CommandLineRunner介面和ApplicationRunner介面

我們在開發中可能會有這樣的情景。需要在容器啟動的時候執行一些內容。比如讀取配置檔案,資料庫連線之類的。SpringBoot給我們提供了兩個介面來幫助我們實現這種需求。這兩個介面分別為CommandLineRunner和ApplicationRunner。他們的執行時機為容器啟動完成的時候。

這兩個介面中有一個run方法,我們只需要實現這個方法即可。這兩個介面的不同之處在於:ApplicationRunner中run方法的引數為ApplicationArguments,而CommandLineRunner介面中run方法的引數為String陣列。下面我寫兩個簡單的例子,來看一下這兩個介面的實現。

CommandLineRunner

具體程式碼如下:
package com.zkn.learnspringboot.runner;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * Created by zkn on 2016/8/12.
 */
@Component
public class TestImplCommandLineRunner implements CommandLineRunner {


    @Override
    public void run(String... args) throws Exception {

        System.out.println("<<<<<<<<<<<<這個是測試CommandLineRunn介面>>>>>>>>>>>>>>");
    }
}
執行結果為:

ApplicationRunner介面

具體程式碼如下:
package com.zkn.learnspringboot.runner;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 * Created by zkn on 2016/8/12.
 * 注意:一定要有@Component這個註解。要不然SpringBoot掃描不到這個類,是不會執行。
 */
@Component
public class TestImplApplicationRunner implements ApplicationRunner {


    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(args);
        System.out.println("這個是測試ApplicationRunner介面");
    }
}
執行結果如下:

@Order註解

如果有多個實現類,而你需要他們按一定順序執行的話,可以在實現類上加上@Order註解。@Order(value=整數值)。SpringBoot會按照@Order中的value值從小到大依次執行。

Tips

如果你發現你的實現類沒有按照你的需求執行,請看一下實現類上是否添加了Spring管理的註解(@Component)。