Java 读取环境配置信息System.getenv()和System.getProperty()使用详解
文章介绍了Java中用于读取环境配置信息的两种方法:System.getenv()和System.getProperty()。
前者读取系统环境变量,返回一个不可修改的Map;
后者获取JVM环境变量值,可以通过-D参数设置。
文章还提到,通过这两种方法可以简化配置,不需要修改代码。
一、System.getenv()
System.getenv()读取的是当前系统环境的环境变量。
要深入理解环境变量的本质,需要对系统父子进程关系有更加清晰的认识。
一般来说,子进程在创建时,会将父进程当时的环境变量复制一份,而父进程中之后发生的环境变量的变动,不会影响子进程中对应的环境变量。
当不传入参数时,System.getenv()的返回值为一个只读的Map,其中包括当前环境下所有环境变量。
二、System.getProperty()
通过 System.getProperty(key)获取单个变量值,通过System.getPropertys() 获取所有 JVM 环境变量值。
当我们通过 启动JVM时,可以通过 -D 设置JVM 环境变量值,在我们的程序中我们也可以通过,System.setProperty(key,value) 设置JVM 环境变量,该值在整个JVM 间是共享的。
三、简单示例
import lombok.extern.slf4j.Slf4j; import java.util.Map; @Slf4j public class Demo { public static void main(String[] args) { Map<String, String> map = System.getenv(); for (String s: map.keySet()) { log.info("{} => {}", s, map.get(s)); } log.info("========================"); System.getProperties().forEach((k, v) -> { log.info("{} => {}", k, v); }); log.info("========================"); String userName = System.getProperty("user.name", "unknown"); log.info("user.name => {}", userName); } }
通过 System.getenv() 和 getProperty() 可以简化我们的有些配置,相比于 xml 等配置文件。
这种方式更轻量,如果我们的程序中没有配置文件,但想使某一两项功能实现可配置,通过System.getenv() 和 getProperty()可以非常容易的实现。
有些事情,没经历过不知道原理,没失败过不明白奥妙,没痛苦过不了解真谛。临渊羡鱼,不如退而结网!

浙公网安备 33010602011771号