先看CommandLineRunner 接口的API:
package org.springframework.boot;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
@FunctionalInterface
public interface CommandLineRunner {
/**
* Callback used to run the bean.
* @param args incoming main method arguments
* @throws Exception on error
*/
void run(String... args) throws Exception;
}
先看ApplicationRunner 接口的API:
package org.springframework.boot;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
@FunctionalInterface
public interface ApplicationRunner {
/**
* Callback used to run the bean.
* @param args incoming application arguments
* @throws Exception on error
*/
void run(ApplicationArguments args) throws Exception;
}
SpringBoot在項目啓動後會遍歷所有實現CommandLineRunner /ApplicationRunner 的實體類並執行run方法,如果需要按照一定的順序去執行,那麼就需要在實體類上使用一個@Order註解【 @Order(value=1..)】(或者實現Order接口)來表明順序.
import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value=1) public class StartupRunnerOne implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println(">>>>>>>>>>>>>>>服務啓動第一個開始執行的任務,執行加載數據等操作<<<<<<<<<<<<<"); } }
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value=2) public class StartupRunnerOne3 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println(">>>>>>>>>>服務啓動第二個開始執行的任務,執行加載數據等操作<<<<<<<<<<<<<"); } }