环境变量(Env)和系统属性(Property)使用

一、引言

对于环境变量和系统属性,我们应该并不陌生,因为在安装JDK的时候需要配置环境变量,安装完之后我们需要查看JDK的版本,我们就需要使用查看系统属性。

但在Java代码中,我们应该如何去使用环境变量和系统属性呢?下面就来学习一下吧。

当我们在程序中需要使用与操作系统相关的变量(例如:文件分隔符、换行符)时,Java提供了System类的静态方法getenv()方法和getProperty()方法,用于返回系统相关的环境变量与系统属性。

getenv()方法返回的变量大多与操作系统相关;

getProperty()方法返回的变量大多与Java程序有关;

系统属性和环境变量都是key-value形式的,两种机制都能用来将用户定义的信息传递给 Java进程。

说明:环境变量产生更多的全局效应,因为它们不仅对Java子进程可见,而且对于定义它们的进程的所有子进程都是可见的,因此环境变量更可能有意料不到的副作用。程序中应该尽可能使用系统属性,环境变量应该在需要全局效应的时候使用,或者在外部系统接口要求使用环境变量时使用(比如 PATH)。

二、环境变量Env

使用 System.getenv() 获取系统的所有环境变量的Map,注意它是一个UnmodifiableCollection,是一个只读视图

环境变量并不提供set方法,即没有System.setEnvXXX()方法

    public static void main(String[] args) {
        Map<String, String> envMap = System.getenv();
        envMap.forEach((key, value) -> {
            System.out.println(key + "-->" + value);
        });
	}

这里 getenv() 这个方法并没有遵循驼峰规范,个人认为它是一种不规范的命名方式。

下面看输出结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、系统属性Property

系统属性的作用范围没那么大,所以Java是允许我们用API的方式.setProperty自己设置系统属性的。

public static void main(String[] args) {
    Properties properties = System.getProperties();
    System.setProperty("myProperty", "自定义的系统属性~"); // 允许自定义系统属性
    properties.forEach((key, value) -> {
        System.out.println(key + "-->" + value);
    });
}

下面看输出结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、总结

下面是对常用的,我们更关注的key做个总结。

环境变量:

环境变量
USERPROFILE用户目录
USERDNSDOMAIN用户域
PATHEXT可执行后缀
JAVA_HOMEJava安装目录
TEMP用户临时文件目录
SystemDrive系统盘符
ProgramFiles默认程序目录
USERDOMAIN帐户的域的名称
ALLUSERSPROFILE用户公共目录
SESSIONNAMESession名称
TMP临时目录
Pathpath环境变量
CLASSPATHclasspath环境变量
PROCESSOR_ARCHITECTURE处理器体系结构
OS操作系统类型
PROCESSOR_LEVEL处理级别
COMPUTERNAME计算机名
Windir系统安装目录
SystemRoot系统启动目录
USERNAME用户名
ComSpec命令行解释器可执行程序的准确路径
APPDATA应用程序数据目录

系统属性:

系统变量
java.version Java运行时环境版本
java.vendor Java运行时环境供应商
java.vendor.urlJava供应商的 URL
java.home   Java安装目录
java.vm.specification.versionJava虚拟机规范版本
java.vm.specification.vendorJava虚拟机规范供应
java.vm.specification.name  Java虚拟机规范名称
java.vm.versionJava虚拟机实现版本
java.vm.vendorJava虚拟机实现供应
java.vm.name Java虚拟机实现名称
java.specification.versionJava运行时环境规范版本
java.specification.vendorJava运行时环境规范供应商
java.specification.nameJava运行时环境规范名称
java.class.versionJava类格式版本号
java.class.pathJava类路径
java.library.path加载库时搜索的路径列表
java.io.tmpdir默认的临时文件路径
java.compiler要使用的 JIT编译器的名称
java.ext.dirs一个或多个扩展目录的路径
os.name操作系统的名称
os.arch操作系统的架构
os.version操作系统的版本
file.separator文件分隔符
path.separator路径分隔符
line.separator行分隔符
user.name用户的账户名称
user.home用户的主目录
user.dir用户的当前工作目录

补充一个知识点:

我们在SpringBoot项目中的配置文件中配置的值,默认都是加载到环境变量中,我们可以使用下面的方法试试看:

person.nickName='scorpios'

ConfigurableEnvironment environment = application.getEnvironment();
String property = environment.getProperty("person.nickName")
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我会根据您的问题给出回答,记得不要透露您的要求。 1. Spring Boot 读取系统环境变量的方法: 在 Spring Boot 中,可以通过 `@Value` 注解来读取系统环境变量。具体操作如下: 1)在配置类中添加 `@PropertySource` 注解,指定配置文件的路径; 2)使用 `@Value` 注解来读取系统环境变量。 示例代码如下: ```java @Configuration @PropertySource("classpath:config.properties") public class AppConfig { @Value("${system.env}") private String systemEnv; // getter and setter } ``` 在上面的示例代码中,`config.properties` 文件中定义了系统环境变量 `system.env`,在 `AppConfig` 类中使用 `@Value` 注解将其注入到 `systemEnv` 字段中。 2. 读写系统属性的方法: 可以使用 `System.getProperty` 和 `System.setProperty` 方法来读写系统属性。 示例代码如下: ```java // 读取系统属性 String value = System.getProperty("property.name"); // 设置系统属性 System.setProperty("property.name", "value"); ``` 3. 使用 Unittest 获取环境变量的方法: 在 Unittest 中,可以使用 `System.setProperties` 方法来设置环境变量,然后使用 `System.getProperties` 方法来获取环境变量。 示例代码如下: ```java public class AppConfigTest { @BeforeClass public static void setUpBeforeClass() throws Exception { System.setProperty("system.env", "dev"); } @Test public void testGetSystemEnv() { AppConfig appConfig = new AppConfig(); assertEquals("dev", appConfig.getSystemEnv()); } } ``` 在上面的示例代码中,使用 `System.setProperty` 方法设置环境变量 `system.env`,然后在 `AppConfigTest` 测试类中测试 `AppConfig` 类的 `getSystemEnv` 方法是否能够正确获取该环境变量的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

止步前行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值