阅读完需:约 2 分钟
1.CommandLineRunner
在使用SpringBoot构建项目时,我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现:
CommandLineRunner
、ApplicationRunner
接口是在容器启动成功后的最后一步回调(类似开机自启动)。
我们先来看看 CommandLineRunner
的简单创建:
只需要创建一个MycommandLineRuner
文件来测试的,这里创建连个文件主要是用来展示 @Order
这个注解的作用(指定优先级)
@Component
@Order(100)//优先级,数字越大越低
public class MyCommandLineRunner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("k2:"+ Arrays.toString(args));
}
}
在这个run(String… args)
方法里的args是启动类里面的args
@SpringBootApplication
public class CommandlierunnerApplication {
public static void main(String[] args) {
SpringApplication.run(CommandlierunnerApplication.class, args);
}
}
创建好后就是写入初始化参数了,我们可以在这里写入自己想要的参数:
结果:
2.ApplicationRunner
用法和前面的一样唯一不一样的地方是这个接口多了很多的方法
@Component
@Order(2)
public class MyApplicationRuner02 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
String[] sourceArgs=args.getSourceArgs();//获取启动的所有参数
System.out.println("sourceArgs"+ Arrays.toString(sourceArgs));
List<String> nonOptionArgs = args.getNonOptionArgs();
System.out.println("nonOptionArgs"+nonOptionArgs);
Set<String> optionNames = args.getOptionNames();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");
for(String optionName : optionNames){
System.out.println(optionName+":"+args.getOptionValues(optionName));
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>结束02");
}
}
两个文件的内容是一样的,不一样的地方再@Order(2)优先级
结果:
ApplicationArguments 类一个有五个方法,如下所示:
- getSourceArgs() 获取参数源
- getOptionNames() 获取所有参数名称
- containsOption(String name) 判断是否包含指定名称的参数
- getOptionValues(String name) 根据参数名称来获取指定的参数
- getNonOptionArgs() 获取不是参数的配置项