网站首页 > java教程 正文
1.简介
在Java应用程序中,Java将自动导入包java.lang, 包含从NullPointerException到Object,Math和String的许多常用类。
java.lang.System中的类是 final 类,也就是说,我们不能继承它,因此,所有的方法都是静态的。
我们研究读取系统属性和环境变量的两种System方法之间的区别。
这些方法是getProperty和getenv。
2.使用System.getProperty()
Java平台使用Properties对象提供有关本地系统和配置的信息,我们将其称为System Properties。
系统属性包括诸如当前用户,Java运行时的当前版本以及文件路径名分隔符之类的信息。
在下面的代码中,我们使用System.getProperty(“ log_dir”)读取属性log_dir的值。我们还使用默认值参数,因此,如果该属性不存在,则getProperty返回 "/tmp/log":
String log_dir = System.getProperty("log_dir","/tmp/log");
要在运行时更新系统属性,可以使用System.setProperty 方法 (尽量不要使用):
System.setProperty("log_dir", "/tmp/log");
我们可以使用propertyName命令行参数将自己的属性或配置值传递给应用程序,格式为
java -jar jarName -DpropertyName=value
在app.jar中将foo的属性设置为bar值:
java -jar app -Dfoo =“ bar”
System.getProperty将始终返回String。
3.使用System.getenv()
环境变量是键/值对和 Properties 一样。许多操作系统使用环境变量来允许将配置信息传递到应用程序中。
设置环境变量的方式因操作系统而异。在Windows中,可以从控制面板使用System Utility应用程序,而在Unix中,可以使用shell脚本。
创建进程时,默认情况下,它会继承其父进程的克隆环境变量。
以下代码段显示了使用lambda表达式打印所有环境变量。
System.getenv().forEach((k, v) -> {
System.out.println(k + ":" + v);
});
getenv() 返回一个只读Map。尝试向地图添加值会抛出 UnsupportedOperationException。
要获取单个变量,请使用变量名称调用getenv:
String log_dir = System.getenv("log_dir");
另一方面,我们可以从应用程序中创建另一个进程,并将新变量添加到其环境中。
要使用Java创建新流程,我们使用ProcessBuilder类,通过 environment 方法可以添加自定义的环境变量
ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
env.put("log_dir", "/tmp/log");
Process process = pb.start();
4.差异
尽管两者本质上都是为String键提供String值的映射,但让我们看一些区别:
- 当环境变量是操作系统变量的不可变副本时,我们可以在运行时更新属性。
- 属性仅包含在Java平台内,而环境变量在操作系统级别是全局的-可供同一计算机上运行的所有应用程序使用。
- 打包应用程序时,属性必须存在,但是我们几乎可以在任何时候在操作系统上创建环境变量。
5.结论
尽管在概念上相似,但是属性和环境变量的应用都非常不同。
选择哪一个通常是范围的问题。使用环境变量,可以将同一应用程序部署到多台计算机上以运行不同的实例,并且可以在操作系统级别甚至在云控制台中进行配置。无需重建应用程序即可更新配置。
始终记住,getProperty遵循驼峰式约定,而getenv则不遵循。
猜你喜欢
- 2024-11-19 log4j2的修复方案
- 2024-11-19 Java环境变量CLASSPATH的作用
- 2024-11-19 环境变量以及第一段Java程序
- 2024-11-19 java基础_超详细_干活_持续更新 hello,world程序 jdk环境变量配置
- 2024-11-19 Java环境变量配置&jdk、jre、jvm的区别和联系
- 2024-11-19 JAVA编程环境搭建 JDK与环境变量、Eclipse
- 2024-11-19 java 命令和环境变量,面试总结
- 2024-11-19 使用Maven环境变量快速构建Java项目
- 2024-11-19 java 第一天——java 环境变量
- 2024-11-19 windows server 2016 Java环境变量配置/打开和关闭IE增强的安全配置
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)