有道无术,术尚可求,有术无道,止于术。

本系列Spring Boot版本2.7.0

文章目录

  • 前言
  • 传递参数
    • 方式1:启动类
    • 方式2:命令行
    • 参数类型
      • 选项参数
      • 非选项参数
      • 系统参数
  • 获取参数
    • 替换应用配置
    • 通过ApplicationArguments获取参数
    • 通过环境Environment获取参数
    • 通过 @Value获取参数
    • 获取系统参数

前言

我们在编写启动类时,会传递一个args参数,它是一个String类型的数组,这个参数怎么传递?有什么用?

@SpringBootApplication
public class App1 {public static void main(String[] args) {SpringApplication.run(App1.class,nsz);}
}

传递参数

方式1:启动类

直接在启动类中声明需要传递的参数,参数使用--为前缀,=为键值对分隔符:

@SpringBootApplication
public class App1 {public static void main(String[] args) {// 传递参数args = new String[]{"--spring.profiles.active=dev", "--name=zhangsan"};SpringApplication.run(App1.class, args);}
}

方式2:命令行

通过java -jar 启动时,可以在命令行的最末尾传递参数:

java -jar xx.jar --name=zhangsan --spring.profiles.active=dev

通过命令行参数启动时,这些参数会被传递到启动类中,在这里可以直接获取这些参数:

参数类型

选项参数

选项参数可以理解为Spring Boot 提供的参数格式,上面的案例中都是选项参数,以--开头,使用=分割键值对,使用java -jar 启动时,需要注意需要写在最后面,不然会报错。

非选项参数

非选项参数 就是没有--开头参数,也没有设置值的单一参数,只有名称,比如下面的agegender都是非选项参数:

java -jar xx.jar --name=zhangsan --spring.profiles.active=dev age gender

系统参数

-Dxxxx是java 运行参数的语法,用于配置一些环境变量,比如-Dserver.port就是系统参数:

java -jar -Dserver.port=8081 app-service001-1.0-SNAPSHOT.jar

获取参数

既然知道了怎么设置参数,接下来就是要知道怎么获取和使用这些参数了,实际应该结合开发中遇到的问题来灵活应用。

替换应用配置

首先,我们在YML配置文件中声明当前多环境为test(测试):

spring:profiles:active: test

然后在启动时,指定环境为prod(生产):

java -jar xx.jar --name=zhangsan --spring.profiles.active=prod

可以看到启动时,多环境设置了为prod,说明启动参数优先级最高,会替换同名配置属性,比如多环境、启动端口、数据库连接通常使用这种方式,在启动的时候动态配置。

通过ApplicationArguments获取参数

在启动时,会将这些参数封装为ApplicationArguments对象,设置到环境对象中,也会注册一个名称为springApplicationArguments的Bean。

可以看到该Bean 中包含了选项参数和非选项参数:

可以注入springApplicationArgumentsBean 来获取启动参数:

    @AutowiredApplicationArguments springApplicationArguments;@BeanUser user() {User user = new User();// 获取原始的参数:--spring.profiles.active=devString[] sourceArgs = springApplicationArguments.getSourceArgs();// 获取非选项参数List<String> argsNonOptionArgs = springApplicationArguments.getNonOptionArgs();//// 获取参数的KEY :spring.profiles.activeSet<String> argsOptionNames = springApplicationArguments.getOptionNames();// 获取参数KEY对应的值,可以多个List<String> optionValues = springApplicationArguments.getOptionValues("name");// 是否包含该参数boolean age = springApplicationArguments.containsOption("age");System.out.println("springApplicationArguments");System.out.println(sourceArgs);System.out.println(argsNonOptionArgs);System.out.println(argsOptionNames);System.out.println(optionValues);return user;}

打印结果如下:

通过环境Environment获取参数

也可以通过环境Bean 对象来获取启动参数值:

    @AutowiredEnvironment environment;@BeanUser user(){String name = environment.getProperty("name");System.out.println(name);return new User();}

通过 @Value获取参数

还可以使用 @Value获取启动参数:

    @Value("${name}")String name;

获取系统参数

-D添加的系统参数,可以通过Environment 或者System类获取:

    @AutowiredEnvironment environment;@BeanUser user(){System.out.println(environment.getProperty("age"));System.out.println(System.getProperty("age"));return new User();}

Spring Boot 2.x系列【9】功能篇之SpringApplication启动参数使用详解相关推荐

  1. Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)

    Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验) 参考文章: (1)Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验) (2)https://www.cnblogs.co ...

  2. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)

    论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...

  3. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现

    论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...

  4. Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)

    2019独角兽企业重金招聘Python工程师标准>>> 相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring ...

  5. Spring Boot Serverless 实战系列“架构篇”首发 | 光速入门函数计算

    作者 | 西流(阿里云函数计算专家) Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 一系列的组件,开发者只需要很少的配置即可创建独立运行的应用程序. ​ ...

  6. Spring Boot 入门之缓存和 NoSQL 篇(四)

    原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多 ...

  7. 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像

    前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...

  8. 护网必备技能:Spring Boot 接口数据加解密 功能实现

    护网必备技能:Spring Boot 接口数据加解密 功能实现 文章目录 护网必备技能:Spring Boot 接口数据加解密 功能实现 1. 尽量少改动,不影响之前的业务逻辑: 2. 考虑到时间紧迫 ...

  9. 2、Spring Boot尚硅谷笔记整理高级篇-消息

    1.Spring Boot尚硅谷笔记整理高级篇-缓存 2.Spring Boot尚硅谷笔记整理高级篇-消息 3.Spring Boot尚硅谷笔记整理高级篇-检索 4.Spring Boot尚硅谷笔记整 ...

最新文章

  1. python生成试卷制卷系统_Python 读写文件 小应用:生成随机的测验试卷文件
  2. 人的一生,到底在追求甚么?...
  3. UA MATH565C 随机微分方程V 算子半群理论简介
  4. mysql内置变量_详解MySQL注入利用的变量
  5. Codeforces Round #480 (Div. 2) B. Marlin
  6. 高性能Web服务器Nginx使用指南
  7. Android 系统(126)---Android的死机、重启问题分析方法
  8. java设计模式(五)--建造者模式(Builder)
  9. 使用ResultReceiver的Android IntentService
  10. PageHelper测试分页插件
  11. WINDOWS用VS2010开发NPAPI插件步骤
  12. es使用同义词插件注意事项
  13. 使用Setup Factory如何制作程序安装包
  14. 数据结构视频教程 清华大学严蔚敏主讲 全48讲完整版asf格式
  15. 通过 Kali Linux 暴力破解 WiFi
  16. 二项分布的期望方差证明_二项分布的期望和方差
  17. babel转码器的使用
  18. 四足机器人——12自由度舵机狗DIY(二)
  19. 通过cookie绕过验证码登录(绕过验证码)
  20. Docker学习之六:基于Dockerfile构建镜像

热门文章

  1. c# Byte解压,压缩
  2. 智力题---100个球两个人轮流拿,每次最多拿n个,谁拿到最后一个球获胜
  3. ElementUI的el-tree实现懒加载查询和直接全部查询出来
  4. 美军用机器人将超士兵数量 10个机器人1名士兵
  5. 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
  6. !!!正则表达式语法
  7. Bia布刷题日记 LC-15 三数之和
  8. ex计算机绘图基础教程怎么画图,cad制图速度小技巧,求习惯性的。实际操作的,快捷键 要最有配合价值的!感谢同仁。。。...
  9. 面向对象的思维方法 (转)
  10. 【linux】Ubuntu 14.04 smba服务器的配置