Spring boot
系统启动任务
CommandLineRunner
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。
很简单,只需要一个类就可以,无需其他配置。
创建任务类 1 实现 CommandLineRunner 接口:
com.hpit.sb.runner. MyCommandRunner1
import
org.apache.log4j.Logger;
import
org.springframework.boot.CommandLineRunner;
import
org.springframework.core.annotation.Order;
import
org.springframework.stereotype.Component;
/**
*
TODO
为了实现服务器启动即执行某些操作,只需要实现spring boot中的CommandLineRunner接口即可
*
*/
@Component
@Order
(value = 1)
// 设置启动执行顺序
public class
MyCommandRunner1
implements
CommandLineRunner {
private
Logger
logger
= Logger.
getLogger
(
this
.getClass());
/**
*
TODO
系统启动即会执行Run方法
*/
@Override
public void
run(String...
arg0
)
throws
Exception {
logger
.info(
"执行启动任务1..."
);
}
}
com.hpit.sb.runner. MyCommandRunner2
import
org.apache.log4j.Logger;
import
org.springframework.boot.CommandLineRunner;
import
org.springframework.core.annotation.Order;
import
org.springframework.stereotype.Component;
/**
*
TODO
为了实现服务器启动即执行某些操作,只需要实现spring boot中的CommandLineRunner接口即可
*
*
*/
@Component
@Order
(value = 2)
// 设置启动执行顺序
public class
MyCommandRunner2
implements
CommandLineRunner {
private
Logger
logger
= Logger.
getLogger
(
this
.getClass());
/**
*
TODO
系统启动即会执行Run方法
*/
@Override
public void
run(String...
arg0
)
throws
Exception {
logger
.info(
"执行启动任务2..."
);
}
}
Spring Boot 应用程序在启动后,会遍历 CommandLineRunner 接口的实例并运行它们的 run 方法。也可以利用
@Order 注解(或者实现 Order 接口)来规定所有 CommandLineRunner 实例的运行顺序。
如下我们使用@Order 注解来定义执行顺序。
这里的
args
就是程序启动的时候进行设置的
:
SpringApplication.run(App.class, new String[]{"hello,","
zjs
"});
这里为了做演示,配置为固定值了,其实直接接收
main
中的
args
即可,那么在运行的时候,进行配置即
可。
启动应用日志输出:
