system property 和environment property 的区别
参考
系统变量(system property)和环境变量(enviroment property)的区别对于java应用开发者而言应该要区分清楚:
1. 概念说明
environment property: 是系统级的环境变量,系统当中所有的进程都可以访问到,下面示例查看windows系统和linux系统的环境变量:
centos7:
win7:
system property:是java应用程序自身指定的变量,通常我们可以在启动应用的时候指定的,格式是:-DsystemPropertyKey=systemPropertyValue
;
下面我们截取tomcat启动bat脚本文件里面部分片段来了解:
2. 示例
我们通过如下代码来感受一下:
public class Demo { public static void main(String[] args) { System.out.println(System.getProperty("a")); System.out.println(System.getenv("b")); Properties props = System.getProperties(); Set<Object> keys = props.keySet(); for(Object key:keys){ System.err.println(key); } Map<String, String> env = System.getenv(); Set<String> keysw = env.keySet(); for (String key : keysw) { System.out.println(key); } } }
我们在idea里面进行运行配置
结果如下图
3、特别说明
System.getenv() 或者 System.getenv("a") 这里获取不到 配置文件中设置的值如server.port,server.port能通过 Environment 获取到
Environment 是个接口用来读取properties、yml、xml以及nosql文件中的key-value值的
同样的道理 Environment 获取不到system中的值