浅谈System.getenv()和System.getProperty()的区别
最近遇到一个需求,服务器实例需要获取当前的环境变量。经过查资料,发现环境变量可以在两个地方设置。
一、在系统层面设置环境变量
在系统层面设置环境变量,之前我们应该都操作过,以windows系统为例
System.getenv()可以获取的在这里设置的变量。
二、在java虚拟机层面设置环境变量
个人理解,System.getProperty()可以获取在JVM 层面的变量,有些变量在JVM启动后,就内置了,如:
参数值 | 参数含义 |
java.version | Java 运行时环境版本 |
java.vendor | Java 运行时环境供应商 |
java.vendor.url | Java 供应商的 URL |
java.home | Java 安装目录 |
java.vm.specification.version | Java 虚拟机规范版本 |
java.vm.specification.vendor | Java 虚拟机规范供应商 |
java.vm.specification.name | Java 虚拟机规范名称 |
java.vm.version | Java 虚拟机实现版本 |
java.vm.vendor | Java 虚拟机实现供应商 |
java.vm.name | Java 虚拟机实现名称 |
java.specification.version | Java 运行时环境规范版本 |
java.specification.vendor | Java 运行时环境规范供应商 |
java.specification.name | Java 运行时环境规范名称 |
java.class.version | Java 类格式版本号 |
java.class.path | Java 类路径 |
java.library.path | 加载库时搜索的路径列表 |
java.io.tmpdir | 默认的临时文件路径 |
java.compiler | 要使用的 JIT 编译器的名称 |
java.ext.dirs | 一个或多个扩展目录的路径 |
os.name | 操作系统的名称 |
os.arch | 操作系统的架构 |
os.version | 操作系统的版本 |
file.separator | 文件分隔符(在 UNIX 系统中是“/” ) |
path.separator | 路径分隔符(在 UNIX 系统中是“:” ) |
line.separator | 行分隔符(在 UNIX 系统中是“/n” ) |
user.name | 用户的账户名称 |
user.home | 用户的主目录 |
user.dir | 用户的当前工作目录 |
还可以在代码层面,通过System.setProperty(key, value)把值设置进去。
或者web容器层面,在服务器容器启动时,把变量加进去,最终会传递给JVM。
例如我们公司之前用的,通过System.getProperty("weblogic.Name")获取服务的实例名称。
个人理解就是weblogic起启动服务是初始化到JVM中的。
或者可以直接在eclipse中的VM arguments添加,这样在该程序运行时,就自动生效了。
如下图:
System.getenv(String name)方法的意义和用法
最近工程里用到
String path = System.getenv(“config_path”);
这样取路径的方法。记录一下。
1.在windows中config_path指的是系统的环境变量。如:
此时取出来的path为:D:\work。有了这个路径就可以做一些读取文件的操作了。
2.在linux中config_path指的是在/etc/profile文件末尾配置环境变量 export config_path=XXX/XXX。(XXX/XXX为文件地址,退出保存,并source /etc/profile生效)。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
赞 (0)