【springboot】 springboot项目如何在项目启动时传入参数 系统启动时执行任务

深碍√TFBOYSˉ_ 2024-04-01 10:28 166阅读 0赞
  1. 如果只需要初始化一些项目内部的数据,方法不带参数 我们比较熟悉的 @PostContruct 注解可以做到
  2. 那如果我们需要外部传入参数 该怎么处理呢?

    1. 1. 实现CommandLineRunner接口
    2. 2. 实现ApplicationRunner接口

CommandLineRunner 比较简单,我们介绍一下ApplicationRunner的使用:

  1. @Component
  2. @Order(98)
  3. public class CustomApplicationRunner implements ApplicationRunner {
  4. @Override
  5. public void run(ApplicationArguments args) throws Exception {
  6. // 无key参数 等同于实现 CommandLineRunner 接口的效果
  7. // CommandLineRunner 接口只支持无key参数
  8. List<String> nonOptionArgs = args.getNonOptionArgs();
  9. for (String each : nonOptionArgs) {
  10. System.out.println(each);
  11. }
  12. // 所有参数
  13. String[] sourceArgs = args.getSourceArgs();
  14. for (String each : sourceArgs) {
  15. System.out.println(each);
  16. }
  17. // 有key参数的key
  18. Set<String> optionNames = args.getOptionNames();
  19. for (String optionName : optionNames) {
  20. // 有key参数的value
  21. List<String> optionValues = args.getOptionValues(optionName);
  22. for (String optionValue : optionValues) {
  23. System.out.println(optionValue);
  24. }
  25. }
  26. }
  27. }

在idea中:
在这里插入图片描述

  1. 孟秋 与你 --age=永远18

其中 孟秋 与你 中间是空格分隔,是两个没有key的参数
age前面是双横杠

  1. --age=永远18 ,组成key value形式的一对参数

在java -jar 命令中:
我们只需直接将参数跟在 java -jar xxx.jar 后面
在这里插入图片描述

  1. 实际应用场景:

    a. 可用于框架中,需要用户手动传入某些配置参数
    b. 可用于某些项目分开部署的场景
    c. 甚至可以配合linux的shell脚本 实现一些骚操作

    (举个例子,不同时间段 部署的参数可能不一样,那可以通过linux的定时任务
    配合脚本语言的判断 执行不同的命令)

    d. 其它需要传入参数的场景

  2. 原理:
    Program arguments 传入的参数,其实就是java main方法中,args接收到的参数,
    args接收到的是原始不带key的,例如上面例子中 args接收到就是以下三个参数:

    1. 1.孟秋 2.与你 3.--age=永远18

    如果我们实现的是CommandLineRunner接口,那我们拿到的就是原始的参数;
    如果我们实现的是ApplicationRunner接口,spring做了处理 我们第3个参数就是说K V格式的

发表评论

表情:
评论列表 (有 0 条评论,166人围观)

还没有评论,来说两句吧...

相关阅读