【springboot】 springboot项目如何在项目启动时传入参数 系统启动时执行任务
- 如果只需要初始化一些项目内部的数据,方法不带参数 我们比较熟悉的 @PostContruct 注解可以做到
那如果我们需要外部传入参数 该怎么处理呢?
1. 实现CommandLineRunner接口
2. 实现ApplicationRunner接口
CommandLineRunner 比较简单,我们介绍一下ApplicationRunner的使用:
@Component
@Order(98)
public class CustomApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// 无key参数 等同于实现 CommandLineRunner 接口的效果
// CommandLineRunner 接口只支持无key参数
List<String> nonOptionArgs = args.getNonOptionArgs();
for (String each : nonOptionArgs) {
System.out.println(each);
}
// 所有参数
String[] sourceArgs = args.getSourceArgs();
for (String each : sourceArgs) {
System.out.println(each);
}
// 有key参数的key
Set<String> optionNames = args.getOptionNames();
for (String optionName : optionNames) {
// 有key参数的value
List<String> optionValues = args.getOptionValues(optionName);
for (String optionValue : optionValues) {
System.out.println(optionValue);
}
}
}
}
在idea中:
孟秋 与你 --age=永远18
其中 孟秋 与你 中间是空格分隔,是两个没有key的参数
age前面是双横杠
--age=永远18 ,组成key value形式的一对参数
在java -jar 命令中:
我们只需直接将参数跟在 java -jar xxx.jar 后面
实际应用场景:
a. 可用于框架中,需要用户手动传入某些配置参数
b. 可用于某些项目分开部署的场景
c. 甚至可以配合linux的shell脚本 实现一些骚操作(举个例子,不同时间段 部署的参数可能不一样,那可以通过linux的定时任务
配合脚本语言的判断 执行不同的命令)d. 其它需要传入参数的场景
原理:
Program arguments 传入的参数,其实就是java main方法中,args接收到的参数,
args接收到的是原始不带key的,例如上面例子中 args接收到就是以下三个参数:1.孟秋 2.与你 3.--age=永远18
如果我们实现的是CommandLineRunner接口,那我们拿到的就是原始的参数;
如果我们实现的是ApplicationRunner接口,spring做了处理 我们第3个参数就是说K V格式的
还没有评论,来说两句吧...