Spring Boot 2.x系列【9】功能篇之SpringApplication启动参数使用详解
有道无术,术尚可求,有术无道,止于术。
本系列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
启动时,需要注意需要写在最后面,不然会报错。
非选项参数
非选项参数
就是没有--
开头参数,也没有设置值的单一参数,只有名称,比如下面的age
和gender
都是非选项参数:
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 中包含了选项参数和非选项参数:
可以注入springApplicationArguments
Bean 来获取启动参数:
@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启动参数使用详解相关推荐
- Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)
Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验) 参考文章: (1)Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验) (2)https://www.cnblogs.co ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现
论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...
- Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)
2019独角兽企业重金招聘Python工程师标准>>> 相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring ...
- Spring Boot Serverless 实战系列“架构篇”首发 | 光速入门函数计算
作者 | 西流(阿里云函数计算专家) Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 一系列的组件,开发者只需要很少的配置即可创建独立运行的应用程序. ...
- Spring Boot 入门之缓存和 NoSQL 篇(四)
原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多 ...
- 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像
前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...
- 护网必备技能:Spring Boot 接口数据加解密 功能实现
护网必备技能:Spring Boot 接口数据加解密 功能实现 文章目录 护网必备技能:Spring Boot 接口数据加解密 功能实现 1. 尽量少改动,不影响之前的业务逻辑: 2. 考虑到时间紧迫 ...
- 2、Spring Boot尚硅谷笔记整理高级篇-消息
1.Spring Boot尚硅谷笔记整理高级篇-缓存 2.Spring Boot尚硅谷笔记整理高级篇-消息 3.Spring Boot尚硅谷笔记整理高级篇-检索 4.Spring Boot尚硅谷笔记整 ...
最新文章
- python生成试卷制卷系统_Python 读写文件 小应用:生成随机的测验试卷文件
- 人的一生,到底在追求甚么?...
- UA MATH565C 随机微分方程V 算子半群理论简介
- mysql内置变量_详解MySQL注入利用的变量
- Codeforces Round #480 (Div. 2) B. Marlin
- 高性能Web服务器Nginx使用指南
- Android 系统(126)---Android的死机、重启问题分析方法
- java设计模式(五)--建造者模式(Builder)
- 使用ResultReceiver的Android IntentService
- PageHelper测试分页插件
- WINDOWS用VS2010开发NPAPI插件步骤
- es使用同义词插件注意事项
- 使用Setup Factory如何制作程序安装包
- 数据结构视频教程 清华大学严蔚敏主讲 全48讲完整版asf格式
- 通过 Kali Linux 暴力破解 WiFi
- 二项分布的期望方差证明_二项分布的期望和方差
- babel转码器的使用
- 四足机器人——12自由度舵机狗DIY(二)
- 通过cookie绕过验证码登录(绕过验证码)
- Docker学习之六:基于Dockerfile构建镜像
热门文章
- c# Byte解压,压缩
- 智力题---100个球两个人轮流拿,每次最多拿n个,谁拿到最后一个球获胜
- ElementUI的el-tree实现懒加载查询和直接全部查询出来
- 美军用机器人将超士兵数量 10个机器人1名士兵
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- !!!正则表达式语法
- Bia布刷题日记 LC-15 三数之和
- ex计算机绘图基础教程怎么画图,cad制图速度小技巧,求习惯性的。实际操作的,快捷键 要最有配合价值的!感谢同仁。。。...
- 面向对象的思维方法 (转)
- 【linux】Ubuntu 14.04 smba服务器的配置