最常见的方法之一是使用System.getenv(),它接受一个可选String参数。根据是否String传递了参数,方法会返回不同的值。具体来说:
如果 aString被传递并且它匹配内部环境中的一个键Map,那么它的值被返回。如果没有找到匹配的键,null则返回。如果未String传递参数,则返回包含所有环境变量及其值的只读值。Map 的键是环境变量名称,其值是值。java.util.Map
请记住,不同的平台以不同的方式运行,例如,在 UNIX、Linux 和 macOS 上,环境变量区分大小写,而在 Microsoft Windows上则不是。
下面,您可以看到如何使用该方法检索 LinuxSHELL环境变量(包含用户的 shell)的示例。
package com.settermjd.twilio.envvars;
public class Main {
public static void main(String[] args) {
System.out.println(
String.format("The current shell is: %s.", System.getenv("SHELL"))
);
}
}
如果要提供默认值,请System.genenv()按以下方式调用:
System.getenv().getOrDefault("SHELL", "/bin/bash")
UNIX、Linux 和 macOS
在 UNIX、Linux 和 macOS 上,可以通过三种核心方式设置环境变量。
可用于当前会话和所有子进程
您可以使用内置的导出命令初始化环境变量,以便它们可用于当前会话,包括当前会话和在当前会话中启动的任何进程,以及在当前会话中启动的任何进程,如示例中所示以下。
export USER_ID=1
以这种方式设置环境变量不是永久性的。如果要永久设置环境变量,则需要在系统范围的启动文件/etc/profile或用户特定的启动文件之一中设置它,即~/.bash_profile、~/.bash_login , 和~/.profile。
可用于当前会话
您可以初始化一个环境变量,使其可用于当前会话,但不能用于任何子进程,如下例所示,不使用该export命令。
USER_ID=1
可用于特定进程
最后,您可以初始化一个环境变量,使其仅对特定进程可用。当只有该过程需要变量时,这很有帮助。在启动所需的过程时,您可以按照下面的示例对其进行初始化。
USER_ID=1 retrieveUserDetails
微软Windows
在 Microsoft Windows 中设置环境变量略有不同。您可以通过控制面板设置它们,也可以在命令提示符或 PowerShell 控制台中设置它们。下面有后两者的例子。
# Set USER_ID in the Windows Command Prompt
set USER_ID=1
# Set USER_ID in the Windows PowerShell console
$Env:USER_ID = 1
虽然以这种方式设置环境变量可能非常有效,但它也会很快变得很麻烦。例如,通过在操作系统的 shell 中设置它们,没有应用程序需要的变量的具体列表,也没有关于变量的用途或它必须是什么数据类型的信息。
鉴于此,除其他原因外,The 12-Factor App建议将配置与代码严格分离。通过使用.env (dotenv) 文件,这种做法很快在整个开发者社区中流行起来。这些是存储键/值对列表的纯文本文件,定义了应用程序工作所需的环境变量,如下例所示。
USER_ID=1
TWILIO_AUTH_TOKEN=1234567890987654321
为了简化项目的开始,出现了一种更常见的做法,即在项目中包含一个.env.example文件,该文件包含所有键,但没有它们的值。当新开发人员开始开发应用程序时,他们会复制该文件,将其命名为.env并为适用于其本地开发环境的每个键设置值。
假设上面的示例是我们项目的.env文件,我们可以使用诸如dotenv-java之类的包来使变量对我们的应用程序可用。
如果你在 Kotlin 中开发,你可以使用dotenv-kotlin。
您可以在下面的代码示例中看到使用包的示例。
package com.settermjd.twilio.envvars;
import io.github.cdimascio.dotenv.Dotenv;
import io.github.cdimascio.dotenv.DotenvException;
public class Main {
public static void main(String[] args) {
Dotenv dotenv = null;
dotenv = Dotenv.configure().load();
System.out.println(String.format(
"Hello World. Shell is: %s. Name is: %s",
System.getenv("SHELL"),
dotenv.get("NAME")
));
}
}
代码初始化一个新Dotenv对象 dotenv,并调用读取位于项目根目录中的.envDotenv.configure().load()中的环境变量。之后,用于检索传递给它的对象的值。如果未找到匹配的键,则该方法返回。dotenv.get()Stringnull
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习