java - Java 中的命令行参数与文件属性 (*.properties) 与系统属性 (-D)

标签 java command-line-interface command-line-arguments ini

可以通过多种方式将参数传递给 Java 应用程序。其中包括:

  1. 命令行参数
  2. 属性文件(properties -样式)
  3. 系统属性(通过 -D 选项传递)
  4. 系统环境变量

从意识形态上讲,一个人什么时候应该选择一个而不是其他? 例如,如果有很多参数要传递给应用程序,是否有任何理由优先使用命令行参数而不是 *.properties 文件?

或者,例如,可以从堆栈深处的任何类轻松访问系统变量(与 CLI 不同,CLI 只能在 main 中访问)。人们是否应该仅仅因为易于访问而更喜欢使用系统属性而不是 CLI?

最佳答案

根据部署需要回答其中一些问题。

命令行参数:当您有其他进程生成您的应用程序并且您希望从调用进程控制这些参数时,这是很好的选择。一个例子是 CRON 生成它。

文件:我不喜欢 ini 风格...你被困在 Windows 上了。如果您想要非常简单的东西,最好使用可以使用 Properties 类加载的 .properties 文件。或者您也可以使用 XML。文件还可以让您选择文件位置,相对于应用程序来说非常适合部署,有些人还喜欢将它们放在全局的某个地方,例如/etc

环境变量:尽管它使部署变得更加复杂,但它们也有其用处。仅当环境影响应用程序的参数时我才会使用它。这意味着,您的应用程序将根据操作系统、机器等采取不同的行为或需要进行不同的配置。

偏好是主观的,可能取决于应用程序、部署、系统等的类型。

关于java - Java 中的命令行参数与文件属性 (*.properties) 与系统属性 (-D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10686963/

相关文章:

java - 带有 @Min 的可空整数 QueryParam 上的 ConstraintViolationException

java - 捕获音量增大和减小按钮按下并且不返回任何内容

python - 使用 docopt 包含多个参数列表

java - 命令行参数的 ArrayIndexOutOfBoundsException

c - 在 Linux 中隐藏 C 程序的命令行参数

java - 将回调从 JavaScript 传递到 Java (Android)

java - 如何从java中的方法打印二维数组?

Node.js:从 CLI 执行文件

azure - 禁用整个 Azure 存储帐户

github - GitHub 上的 Oauth 2.0 客户端 key [CLI 应用程序]