项目启动后做一些初始化的工作,可以说使用以上接口
多个实现示例
当初始化工作比较多的时候,我们可能会创建多个类来实现 ApplicationRunner 接口,这时候我们可以通过 @Order 注解来决定执行的先后顺序,值越小越先执行
@Component
@Order(value = 1)
public class MyApplicationRunner1 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("I am MyApplicationRunner1");
}
}
@Component
@Order(value = 2)
public class MyApplicationRunner2 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("I am MyApplicationRunner2");
}
}
// I am MyApplicationRunner1
// I am MyApplicationRunner2
参数解析
在使用过程中,我们会发现 run() 方法中带有一个 ApplicationArguments 参数,它的主要目的在于保存启动时加入的额外参数
举例说明,设置参数:
获取
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(args.containsOption("server.port"));
System.out.println(args.getOptionValues("server.port"));
System.out.println(JSON.toJSONString(args));
}
}
方法 | 作用 |
---|---|
getSourceArgs() | 获取参数源 |
getOptionNames() | 获取所有参数名称 |
containsOption(String name) | 判断是否包含指定名称的参数 |
getOptionValues(String name) | 根据参数名称来获取指定参数 |
getNonOptionArgs() | 获取所有不是参数的配置项 |
CommandLineRunner
CommandLineRunner接口中run方法的参数为String数组,其它和ApplicationRunner一样