先看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(">>>>>>>>>>服务启动第二个开始执行的任务,执行加载数据等操作<<<<<<<<<<<<<"); } }