Java 中的不同参数类型

news2024/12/23 4:12:43

是不是还傻傻分不清参数配置到底怎么写,写在哪个位置,那么这篇文章就让你学会。

目录

1、Program arguments

2、VM options

3、Environment variables

最佳实践


打开 IDEA 的 Run Configuration,可以看到以下参数配置

  • VM options
  • Program arguments
  • Environment variables

1、Program arguments

Program arguments:程序参数,用于设置当前程序的参数

配置方式

在 jar 文件后面直接进行配置,参数以空格分隔,构成一个参数数组

java -jar nacos.jar hello world

取值方式

可以从 main 方法的 args 参数中拿到数据

public static void main(String[] args) {
    System.out.println("获取到的值是: " + Arrays.toString(args));
}

再来看看一段 SpringBoot 程序

@SpringBootApplication
public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

这段代码里,SpringBoot 对 main 方法的 args 参数进行了接收

那用 args 做了什么呢?

下面我摘出关键代码 解析参数

这是一段解析 args 数组的方法,位置在 

org.springframework.core.env.SimpleCommandLineArgsParser#parse

 这段代码做的事情就是对参数进行解析,将结果存储在内部的 map 或 list 中。

假设如下参数

java -jar app.jar --user=张三 --user=李四 --class=计算机课 room=516

结果如下

可以看出对于 -- 开头的参数

存储到了 CommandLineArgs 的 optionArgs 中,否则就存储在 nonOptionArgs 中。

而对于 optionArgs 相同的 key ,其 value 会以列表的形式放在一起。

也就是说,Spring 将 程序参数进行了解析并存了起来,这样就可以实现通过 程序参数 来改变 Spring 行为功能了。

由于本文的重点不是 Spring,所以不探讨 Spring 内部如何流转处理这些参数的。

2、VM options

这个是 JVM 虚拟机级别的参数,配置该参数可以调整当前 JVM 实例的行为。

常见的参数配置有  -Xms4G -Xmx4G -Xmn2G ... 

-D 参数用来额外增加一些配置项。

格式为:-Dkey=value

配置方式

注意 -D 参数是跟在 java 后面的

java -Dnacos.standalone=true -jar nacos.jar 

取值方式

String value = System.getProperty("nacos.standalone")

除了可以自己设置参数外,VM options 也有内置的参数。

 以上参数都可以通过 System.getProperty(name) 方法拿到。

3、Environment variables

Environment variables 代表系统环境参数

配置方式

Windows

 Linux 

vim /etc/profile 

source /etc/profile

取值方式

System.getenv(key)

 另外,可通过   Map<String, String> envs = System.getenv()  拿到全部参数。

最佳实践

1. 对于账号密码等敏感信息使用 系统环境变量方式 Environment variables

例如数据库连接地址、账号,我们就可以配置在系统环境变量里,开发人员将无法得知真实的账号,增加了安全性。(除非他有服务器权限)

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: ${MYSQL-USER:user}
      password: ${MYSQL-PWD:123456}
      url: jdbc:mysql://${MYSQL-HOST:localhos}:${MYSQL-PORT:3306}/${MYSQL-DB:test}

2. 使用 程序参数 改变 SpringBoot 应用行为

例如常见的不同环境

java -jar user.jar --spring.profiles.active=test

java -jar user.jar --spring.profiles.active=prod

这样就不需要改变代码了。

当然如果某台服务器专门是测试或生产服务器,就可以直接把它配置为 系统环境变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue美食网站idea maven

目 录 摘 要 I 1 绪论 1 1.1研究背景 1 1. 2研究现状 1 1. 3研究内容 2 2 系统关键技术 3 2.1 springboot框架 3 2.2 JAVA技术 3 2.3 MYSQL数据库 4 2.4 B/S结构 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1. 2经济可行…

12.11哈希表

目录 一.哈希表 1.概念 2 冲突-概念 3 冲突-避免 4 冲突-避免-哈希函数设计 直接定制法--(常用) 2. 除留余数法--(常用) 3. 平方取中法--(了解) 4. 折叠法--(了解) 5. 随机数法--(了解) 6. 数学分析法--(了解) 5 冲突-避免-负载因子调节&#xff08;重点掌握&#…

151-160-mysql-高级篇-设计规范及其他调优策略

151-mysql-高级篇-设计规范以及其他调优策略&#xff1a; 1、数据库的设计规范 1. 范 式 1.1 范式简介 **在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。**可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的级别。要想设计一…

iOS 组件二进制与源码查看及调试方案

好久没有写文章了这里记录一下把项目代码二进制化提高编译效率的整个过程中碰到的问题和解决方案 先提一下优化编译速度的基本方向基本就是从不同的编译阶段来出主意&#xff0c;比如&#xff1a; 预编译阶段的头文件查找&#xff1a; 一款可以让大型iOS工程编译速度提升50%的…

[附源码]Node.js计算机毕业设计大学生心理咨询系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

无法安装vmnet8虚拟网络适配器、vmware network editor未响应、注册失败,请检查账号数据库配置是否正确的解决

文章目录虚拟网络适配器安装 | vmware network editor未响应注册失败&#xff0c;请检查账号数据库配置是否正确的解决关于第一次安装虚拟机的全文约 423 字&#xff0c;预计阅读时长&#xff1a; 2分钟虚拟网络适配器安装 | vmware network editor未响应 原因&#xff1a;卸载…

JDK8 ThreadLocal 源码解析与最佳实践

文章目录用法Example1Example2Springboot Transcation 注解的原理Entry 的 Key 设置为弱引用有什么好处内存泄漏问题为什么 ThreadLocal 不需要 ReferenceQueueget()getEntrygetEntryAfterMissThis class provides thread-local variables. These variables differ from their …

路径规划|多目标海洋捕食者算法(MOMPA)求解最短路径问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1 LabVIEW面向对象编程(OOP)采用仪器为中心的硬件抽象层(HAL)&#xff0c;使用面向对象的设计模式&#xff0c;可以部署一个仪器重用库&#xff0c;该库可以随着需求和仪器趋势的变化而增长&#xff0c;同时在不可避免的硬件过…

【Redis】主从复制

一、简介 1、什么是主从复制 主机数据更新后根据配置和策略&#xff0c;自动同步到备机的master/slave机制&#xff0c;Matser以写为主&#xff0c;Slave以读为主&#xff0c;简单来说如下图 2、主从复制的好处 读写分离&#xff1a;Matser以写为主&#xff0c;Slave以读为主…

指针的初步认识

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、指针是什么1.1 如何理解编址…

《深入分布式缓存-从原理到实践》笔记

《深入分布式缓存-从原理到实践》笔记 笔记作者&#xff1a;arthury.dy.lee 日期&#xff1a;2018.12.05 笔记只是本人觉得重要的部分的一些摘要或总结&#xff0c;更侧重于后5章。其它更详细内容&#xff0c;请自行买书阅读。 文章目录《深入分布式缓存-从原理到实践》笔记…

【Linux C】线程简单介绍

线程的概念 基本概念 进程&#xff1a;是指⼀个内存中运⾏的应⽤程序&#xff0c;每个进程都有⼀个独⽴的内存空间&#xff0c;⼀个应⽤程序可以同时运⾏多个进程&#xff1b;进程也是程序的⼀次执⾏过程&#xff0c;是系统运⾏程序的基本单位&#xff1b;系统运⾏⼀个程序即…

时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比)

时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比) 目录 时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比)预测效果基本介绍程序设计ARMAARMAARIMASARIMAARIMAXVAR参考资料预测效果…

LC-6260. 矩阵查询可获得的最大分数(最小堆,并查集+离线(海平面上升问题))【周赛323】

6260. 矩阵查询可获得的最大分数 难度困难7 给你一个大小为 m x n 的整数矩阵 grid 和一个大小为 k 的数组 queries 。 找出一个大小为 k 的数组 answer &#xff0c;且满足对于每个整数 queres[i] &#xff0c;你从矩阵 左上角 单元格开始&#xff0c;重复以下过程&#xf…

2022年了,你还没搞清楚箭头函数与普通函数的区别嘛?

目录 1.箭头函数简介 2.箭头函数与普通函数的区别 A.声明方式不同&#xff0c;匿名函数 B.this指向不同 C.箭头函数的this永远不会变&#xff0c;call、apply、bind也无法改变 D.箭头函数没有原型prototype E.箭头函数不能当成一个构造函数 F.箭头函数没有自己的argume…

javaSE(数据类型、运算、逻辑控制、方法)

1.初识Java JDK、JRE、JVM之间的关系&#xff1f; JDK(Java Development Kit):Java开发工具包&#xff0c;提供给Java程序员使用&#xff0c;包含了JRE&#xff0c;同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。 JRE(Java Runtime Environment):Java运行时环…

LeetCode 1775. 通过最少操作次数使数组的和相等 --双指针

通过最少操作次数使数组的和相等 中等 174 相关企业 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间&#xff08;包含 1 和 6&#xff09;。 每次操作中&#xff0c;你可以选择 任意 数组中的任意一个整数&#xff0c;将它变成 1 到 6 …

Android9.0以上系统安装Edxposed

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、背景说明 Android9.0以前&#xff0c;Xposed框架可通过apk进行快速安装&#xff0c;github地址&#xff1a; GitHub - rovo89/Xpos…

CRACK:CAD Exchanger SDK 3.15.0/MAC/WIN/LINUX/Android

CAD Exchanger SDK用于读取、写入和可视化 3D CAD 文件的软件库 通过访问 CAD 和 BIM 数据&#xff0c;快速轻松地丰富您的 Web、服务器或桌面应用程序。Ω578867473 使用 CATIA、SOLIDWORKS、Creo、STEP、JT、IFC 以及来自 C、Python、C#、Java 和 JavaScript 的更多格式。 适…