区别
先说结论吧
-
System.getenv()
:获取环境变量信息 -
System.getProperty()
: 获取系统属性变量
听着好像迷迷糊糊的。我们直接看使用区别
idea
两者在idea
传递值的时候就有区别
我们用一个程序来测试
-
测试程序
public static void main(String[] args) {
print("getenv weihubeats-env", System.getenv("weihubeats-env"));
print("getenv weihubeats-property", System.getenv("weihubeats-property"));
print("getProperty weihubeats-env", System.getProperty("weihubeats-env"));
print("getProperty weihubeats-property", System.getProperty("weihubeats-property"));
}
public static void print(String method, String msg) {
System.out.println(method + ": " + msg);
}
首先我们什么都不传

看看idea是如何传递着两个参数的

VM options
主要用来传递Property
属性的
Environment variables
主要用来传递Env
系统环境变量
系统环境变量传递方式就是
-
kye=value
比如weihubeats-env=weihubeats-env
系统属性变量属性变量则要加-D
比如-Dweihubeats-property=weihubeats-property
像spring
的一些参数都是通过系统属性变量传递的比如
-Dspring.profiles.active=dev
设置系统环境变量和属性变量

运行结果

实际项目中如何传递
System.getenv()
代表系统的环境变量实际和进程没太大关系。
如果能通过System.getenv()
获取到的参数一般在宿主机执行echo ${xxx}
也能获取到
System.getProperty()
则主要用于启动参数中传递的参数。
比如
java -Dwh=test-property -jar xx.jar
通过启动参数传递后应用程序直接通过
System.getProperty("wh");
就能获取到
kubernetes中的pod环境变量传递
实际在用kubernetes
做一些服务编排的时候就会给pod打一些标签,然后通过环境变量传递给应用,比如我们定义一下如下的deployment.yml
spec:
template:
metadata:
labels:
tag: test
spec:
containers:
- env:
- name: DUBBO-PROVIDER-TAG
valueFrom:
fieldRef:
fieldPath: metadata.labels['tag']
这里我们将标签的test
传递给环境变量中
-
key: DUBBO-PROVIDER-TAG
-
value: test
这里传递的环境变量就只能通过
System.getenv()
获取
如果想要通过System.getProperty
获取则还需要将环境变量传递到启动参数中
总结
总的来说主要还是System.getProperty
用的多。主要用于启动参数的获取。
当然也可以通过System.getProperty
获取到一些系统的参数 比如
System.getProperty("os.name")
System.getProperty("java.io.tmpdir")
等 但是如果是利用kubernetes
进行环境变量标签传递就需要额外处理,单独使用System.getProperty
是获取不到的
原文始发于微信公众号(小奏技术):结合idea聊聊System.getProperty和System.getenv()的区别
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/236107.html