做了这些年开发,今天第一次梳理了这三种常用的变量

在前边分享自定义springboot的配置文件的时候,提到了JVM变量和系统环境变量的配置,今天想对这块的内容做个梳理,

1、什么是JVM变量、系统环境变量、程序变量;

2、怎么使用这些变量;

3、这些变量如何起作用的;

一、认识这些这些变量

1.1、JVM变量

所谓的JVM变量和平时见到的不太一样,比如-Xmx1024m这样的,这里说的JVM变量更确切的说是java命令中的一个选项,如,查看java命令的帮助,

做了这些年开发,今天第一次梳理了这三种常用的变量

我们前边在idea中进行配置的时候,使用的也是”-D”这个选项,在服务启动的时候会设置一个key-value的属性。并且从上面的注释也可以看到对”-D”的解释是”设置系统属性”,当然设置了系统属性就要获取系统属性,后面会说到如何获取系统属性。类似”-D”这样的选项还有这些常见的:java -classpath、java -version,还有下面的java -javaagent:

做了这些年开发,今天第一次梳理了这三种常用的变量

1.2、系统环境变量

所谓系统环境变量,更多的理解为某个服务的全局的环境变量,供这个服务中的所有组件来使用,

1.3、程序变量

所谓程序变量指的是main方法中的参数,我们经常写的main方法如下,

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

我们知道 main方法是有返回值的,而且返回值是固定的,是字符串数组,只不过在平时我们执行main方法的时候很少会传参。这里说的程序变量就是说在springboot启动的时候给启动类中的main方法传值。映射到idea中如下,

做了这些年开发,今天第一次梳理了这三种常用的变量

在上面的”Program arguments”中便可以配置程序变量,在执行的时候传入main方法的参数中,可以在main方法中使用。

二、怎么使用这些变量

上面说到什么是JVM变量、环境变量、程序变量,下面需要看下如何使用这些变量。

2.1、JVM变量

其实在前面的文章中已经使用了JVM变量,对应到idea中就是在下面的位置进行配置即可,今天先不重复之前的配置,顺便配置一个, 需要注意一点这里的配置除了JVM已经定义好的,其他的自定义配置请使用前面说到的”-D”的形式,多个配置使用空格隔开

做了这些年开发,今天第一次梳理了这三种常用的变量

上面配置好了,要怎么使用那,简单起见我这里就在BootServer中使用了,其实这里的配置可以在任何一个类中使用,看下下面的用法就明白了,

@SpringBootApplication
public class BootServer {
    public static void main(String[] args) {
        //获取vm参数
        String value=System.getProperty("customer.value");
        String key=System.getProperty("customer.key");
        System.out.println("value:"+value+",key:"+key);

        SpringApplication.run(BootServer.class);
    }
}

启动时的日志如下,

做了这些年开发,今天第一次梳理了这三种常用的变量

可以看到打印出来了配置的值。 获取JVM变量的方式很简单,就是使用”System.getProperty()”方法即可,所以我说在每个类中都可以获取,也就是说这个参数对整个服务都是起作用的

在idea启动的时候第一行都会打印下面的一句话,不知道大家注意过没用,而且还有三个点,你点开过没有,

做了这些年开发,今天第一次梳理了这三种常用的变量

没用点开的小伙伴,你肯定错过了一个亿,今天我们点开看下,

做了这些年开发,今天第一次梳理了这三种常用的变量

其实这里执行的就是”java -jar “这样的命令,只不过加了参数,而且可以看到加了”-D”,我们加的JVM变量就是以这样的形式传到程序里的。

2.2、环境变量

环境变量的配置,在idea中是下面这样的配置,

做了这些年开发,今天第一次梳理了这三种常用的变量

那么在程序中是怎么获取这里的配置呐,

@SpringBootApplication
public class BootServer {
    public static void main(String[] args) {
        //获取vm参数
        String value=System.getProperty("customer.value");
        String key=System.getProperty("customer.key");
        System.out.println("value:"+value+",key:"+key);
        //获取环境变量
        String templateValue=System.getenv("template");
        System.out.println("环境变量:"+templateValue);

        SpringApplication.run(BootServer.class);
    }
}

使用方式也很简单,使用”System.getenv()”方法即可,而且在程序的每个类中都可以使用,

做了这些年开发,今天第一次梳理了这三种常用的变量

2.3、程序变量

好了,最后来看下程序变量是如何使用的,其配置方式也很简单,

做了这些年开发,今天第一次梳理了这三种常用的变量

在idea中”Program arguments”中配置程序变量,多个值使用”空格”分隔即可,在程序中获取配置的程序变量也很简单,这里需要注意这个变量只能在含有main方法的类中使用。

@SpringBootApplication
public class BootServer {
    public static void main(String[] args) {
        //获取vm参数
        String value=System.getProperty("customer.value");
        String key=System.getProperty("customer.key");
        System.out.println("value:"+value+",key:"+key);
        //获取环境变量
        String templateValue=System.getenv("template");
        System.out.println("环境变量:"+templateValue);
        //获取程序变量
        System.out.println(args[0]+","+args[1]+","+args[2]);

        SpringApplication.run(BootServer.class);
    }
}

打印结果如下,

做了这些年开发,今天第一次梳理了这三种常用的变量

打印出了配置的”1 2 3″.

前边提到在程序开始时会有一长串的命令,我们点开来看,能找到程序变量的影子,

做了这些年开发,今天第一次梳理了这三种常用的变量

其实就是在”java -jar xxx.jar xxx.xxx.xx 参数”,这里的参数就是程序变量。

三、总结

主要分析了,平时开发使用比较多的几种变量及用法,

1、JVM参数、程序变量、环境变量;

2、JVM参数通过”-D”来配置;程序变量在启动类后跟带”空格”的参数值;

3、JVM参数、环境变量在每个类中都可以获取到,而程序变量仅在启动类的main函数中;

4、JVM参数、环境变量分别通过System.getProperty()、System.getenv()方法获取;

推荐阅读

springboot如何使用自定义配置文件

springboot竟然有5种默认的加载路径,你未必都知道

5分钟快速搭建一个springboot的项目

Original: https://www.cnblogs.com/teach/p/16324213.html
Author: 良工说技术
Title: 做了这些年开发,今天第一次梳理了这三种常用的变量

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594166/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring Security 一键接入验证码登录和小程序登录

    最近实现了一个多端登录的 Spring Security组件,用起来非常丝滑,开箱即用,可插拔,而且灵活性非常强。我觉得能满足大部分场景的需要。目前完成了手机号验证码和微信小程序两…

    Java 2023年5月30日
    074
  • [学习笔记] Java流、文件和IO

    IO是Input和Output的的缩写,即输入/输出,它是一种流式的数据输入和输出的模型; Input把外部数据读到内存,Output把内存当中的数据输出到外部; 由于代码在内存中…

    Java 2023年6月5日
    072
  • 对象存储

    注意事项:如果文件类型是图片,则使用MultipartFile类的对象,如MultipartFile file(比较推荐) 适用于流式文件传输,在上传图片,音/视频,文档等,都可采…

    Java 2023年6月13日
    085
  • 自己挖坑自己埋

    谨用于记录自己在设计时由于考虑不周导致的隐患,阿门。 2021-07-19 新近上线了《智能串接》功能,该功能类似于各种工程项目中的quickStart功能,在该模块设计时留下了两…

    Java 2023年6月9日
    071
  • RPC学习–C#使用Thrift简介,C#客户端和Java服务端相互交互

    本文主要介绍两部分内容: C#中使用Thrift简介 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互。 用纯C#实现Client和Server C#服务端,…

    Java 2023年5月29日
    096
  • Java窗口的猜数字游戏

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月8日
    080
  • 深入Java内存模型之阅读理解(2)

    锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是…

    Java 2023年5月29日
    065
  • javase集合 温故而知新

    重温javase集合 前言:1、为什么要有集合?数组长度需要在初始化时确定大小,数据结构单一、因此集合出现了 2、数组和集合的区别区别一:数组既可以存储基本数据类型,又可以存储引用…

    Java 2023年6月16日
    069
  • Java: State Pattern

    java;gutter:true; /<em><em> * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 状态模式 State P…

    Java 2023年6月16日
    069
  • Spring和Springboot相关知识点整理

    简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做深入的讲解。 思维导图 右键新窗口打开可以放大。 说明 使用@Config…

    Java 2023年5月30日
    085
  • SpringBoot2.3.12.RELEASE优雅的全局异常处理(模板一)

    参考:https://www.cnblogs.com/xuwujing/p/10933082.html 1、首先,需要引入maven依赖包,如下所示: 1 "1.0&qu…

    Java 2023年5月30日
    084
  • 每日一考-9.15

    wait和sleep的区别 简说:wait释放🔒,sleep不释放🔒 例子:买票过程中,当程序进行上锁后 sleep控制下的线程,买票是一一完成,当程序休眠后,sleep不会释放🔒…

    Java 2023年6月16日
    068
  • 咕泡学院高级架构师全套课程

    百度网盘分享链接: https://pan.baidu.com/s/1yFtiPsIcDGFyELJHl4wjQg视频也是从网上找了好久才找的的。我看了一部分,感觉不同,同事也说高…

    Java 2023年6月6日
    097
  • 线上elasticsearch unassigned shards 导致RED解决

    先通过命令查看节点的shard分配整体情况 curl -X GET "ip:9200/_cat/allocation?v" 说明:有16个索引未分片 2、查看未…

    Java 2023年6月6日
    0141
  • Java精品视频资源,自学Java人手一套!

    ​ 发现有很多粉丝是学java的,为了大家能够快速成长,所以我今天精心挑选了一些java相关的视频资源分享给大家,大家一定好好利用起来,这些技术学会之后,进大厂指日可待,加油。 一…

    Java 2023年6月7日
    060
  • Servlet快速入门

    精确匹配 配置路径: undefined 访问路径: localhost:8080/web-demo/user/servlet 目录匹配 配置路径: undefined 访问路径:…

    Java 2023年6月5日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球