1 环境变量介绍
1.1 系统级别环境变量
参数值 | 参数含义 |
---|---|
COLORFGBG | ‘15;0’ |
COLORTERM | truecolor |
COMMAND_MODE | unix2003 |
DC | TE |
ERROR_FORMAT_LOGGING_PATH | /tmp/error_monitor_log |
INFOPATH | /opt/homebrew/share/info: |
ITERM_PROFILE | Default |
ITERM_SESSION_ID | w0t0p0:73AE3D8B-07BA-45B7-998D-633C71654EF8 |
LANG | zh_CN.utf-8 |
PATH | /usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin |
来源
- 系统自带
- shell主动写入,例如export、set命令
- docker容器构建时生成,例如ENV命令、k8s的configmap
1.2 JVM虚拟机级别环境变量
参数值 | 参数含义 |
---|---|
java.version | Java 运行时环境版本 |
java.home | Java 安装目录 |
java.vm.version | Java 虚拟机实现版本 |
java.vm.vendor | Java 虚拟机实现供应商 |
java.vm.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 | 用户的当前工作目录 |
来源
- java虚拟机自带
- java启动参数带入,例如-Dspring.profiles.active=smoke
- java编码主动写入,例如System.setProperty
- springboot 的application.properties
2 Java程序获取环境变量的方式
- System.getenv()
- 只能获取系统环境变量
- System.getProperty()
- 只能获取虚拟机级别环境变量
- apache 的工具类 SystemUtils.getEnvironmentVariable
- 实现是System.getenv(),只是多了默认值
- spring 的注解 @Value
- 能获取系统环境变量和虚拟机的环境变量,但在bean初始化时注入值
3 单测中模拟环境变量
3.1 虚拟机级别
System.setProperty
3.2 系统级别
先引入工具类
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.19.0</version>
<scope>test</scope>
</dependency>
代码中使用
@ClassRule
public static final EnvironmentVariables environmentVariables = new EnvironmentVariables();
@BeforeClass
public static void beforeClass() {
environmentVariables.set("LOAD_DETAIL_LOG", "true");
}