gpt4 book ai didi

java - 设置 java 系统属性,-D 或 System.setProperty() 的最佳实践是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:25 35 4
gpt4 key购买 nike

我需要为我目前正在处理的 RMI 应用程序设置代码库,并且已经成功地使用了 first

try{
ResourceBundle config = ResourceBundle.getBundle("myApp");
String codeBaseUrl = config.getString("codeBaseUrl");
System.setProperty("java.rmi.server.codebase", codeBaseUrl);
} catch (Exception e) {
e.printStackTrace();
}

之后使用

java -Djava.rmi.server.codebase=http://192.168.1.1/path/to/codebase ...

在命令行上。

这两种方法都允许在无需重新编译的情况下更改代码库,但 System.setProperty 方法允许将代码库绑定(bind)到属性文件中并使用相同的启动命令。

我读过的大多数教程/文档都使用 -D 方法,让我相信这是公认的最佳实践,但我一直无法找到任何解释为什么我应该使用其他方法的内容。

-D 是否被认为是设置代码库等系统属性的最佳实践,这有什么好处/它避免了哪些陷阱?

最佳答案

(已编辑 - 我误读了问题)

两者比较:

  • -D可配置的 - 它是在运行时指定的
  • 通过 System.setProperty() 的资源包仍然是“运行时”,但它是通过一个超出启动命令的文件进行编辑的

首先,通过在运行时指定设置来驱动灵活的行为总是比硬编码行为更可取(除非行为实际上并不灵活 - 即不要使用配置,除非这样做有值(value))。

使用文件的主要缺点是它可能包含敏感数据,例如密码,系统管理员不希望这些数据永久地躺在磁盘上。如果密码是作为启动命令的一部分输入的,它是临时的并且更加安全( session 命令历史记录无法承受)。

使用文件的好处是您可以建立正确的设置并将它们保留在文件中。您甚至可以通过源代码管理管理文件。


还有一个更安全的选择,那就是启动时要求在命令行上输入密码,不留痕迹。

关于java - 设置 java 系统属性,-D 或 System.setProperty() 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612723/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com