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则不遵循 。
 
Java 获取属性和环境变量的方法

文章插图
 

【Java 获取属性和环境变量的方法】


    推荐阅读