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


      在前边分享自定义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的项目

  • 相关阅读:
    前端调试技巧
    封装axios,发送的POST请求,三种方式
    前端谷歌浏览器network详解(转载)
    【网络排查】tcpdump和Wireshark
    【网络排查】TCP连接都是用TCP协议沟通的吗?
    【网络排查】 挥手:Nginx日志报connection reset by peer是怎么回事?
    【网络排查】定位防火墙(一):传输层的对比分析
    【网络排查】网络分层
    Ansible入门系列普通用户执行playbook
    Docker搭建ELK
  • 原文地址:https://www.cnblogs.com/teach/p/16324213.html
Copyright © 2020-2023  润新知