Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的命令行参数与文件属性(*.properties)与系统属性(-D)_Java_Command Line Interface_Command Line Arguments_Ini - Fatal编程技术网

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

Java中的命令行参数与文件属性(*.properties)与系统属性(-D),java,command-line-interface,command-line-arguments,ini,Java,Command Line Interface,Command Line Arguments,Ini,有许多方法可以将参数传递给Java应用程序。其中包括: 命令行参数 属性文件(Properties-style) 系统属性(通过-D选项传递) 系统环境变量 在意识形态上,什么时候一个人应该选择一个人而不是其他人? 例如,如果有很多参数要传递给应用程序,那么有没有理由支持命令行参数而不是*.properties文件 或者,例如,可以从堆栈深处的任何类轻松访问系统变量(与CLI相反,CLI只能在main中访问)。是否只因为易于访问而宁愿使用系统属性而不使用CLI?取决于解决其中一些问题的部署需要

有许多方法可以将参数传递给Java应用程序。其中包括:

  • 命令行参数
  • 属性文件(
    Properties
    -style)
  • 系统属性(通过
    -D
    选项传递)
  • 系统环境变量
  • 在意识形态上,什么时候一个人应该选择一个人而不是其他人? 例如,如果有很多参数要传递给应用程序,那么有没有理由支持命令行参数而不是*.properties文件


    或者,例如,可以从堆栈深处的任何类轻松访问系统变量(与CLI相反,CLI只能在
    main
    中访问)。是否只因为易于访问而宁愿使用系统属性而不使用CLI?

    取决于解决其中一些问题的部署需要

    命令行参数:如果有其他进程生成应用程序,并且希望从调用进程控制这些参数,那么命令行参数很好。一个例子是CRON生成它

    文件:我不喜欢ini样式…你被困在Windows上了。首选.properties文件,如果需要非常简单的内容,可以使用properties类加载这些文件。也可以使用XML。文件还为您提供了文件放置的选择,相对于应用程序而言,它非常适合部署,有些人还喜欢将它们放置在全局位置,如/etc

    环境变量:这些变量有它们的位置,尽管这会使部署更加复杂。只有当环境影响应用程序的参数时,我才会使用它。也就是说,您的应用程序将根据操作系统、机器等进行不同的操作或需要进行不同的配置


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

    取决于解决其中一些问题的部署需求

    命令行参数:如果有其他进程生成应用程序,并且希望从调用进程控制这些参数,那么命令行参数很好。一个例子是CRON生成它

    文件:我不喜欢ini样式…你被困在Windows上了。首选.properties文件,如果需要非常简单的内容,可以使用properties类加载这些文件。也可以使用XML。文件还为您提供了文件放置的选择,相对于应用程序而言,它非常适合部署,有些人还喜欢将它们放置在全局位置,如/etc

    环境变量:这些变量有它们的位置,尽管这会使部署更加复杂。只有当环境影响应用程序的参数时,我才会使用它。也就是说,您的应用程序将根据操作系统、机器等进行不同的操作或需要进行不同的配置


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

    好吧,说到配置,每个程序员都有自己的想法,知道如何正确地执行。。。像往常一样,这取决于很多事情

    我用这种方式处理这个选择:如果它类似于Environment var(类似于$PATH或$SHELL),并且可以/必须由调用者(另一个程序或启动脚本)设置,那么它直接通过-D开关进入System.Properties

    如果是其他内容,则直接转到属性文件(实际上,如何加载并不重要,有几种方法可以实现,每种方法都有优缺点,我最喜欢的是从类路径加载,但这只是一个品味问题)


    我尽量将属性保留在系统中。属性只是最小的,非常重要的事情,如果是大型配置,最好使用属性或XML,甚至更好的数据库表,但同样,这取决于应用程序的复杂性(带有DB的HelloWorld是完全多余的),每个程序员都有自己的想法,如何正确地做。。。像往常一样,这取决于很多事情

    我用这种方式处理这个选择:如果它类似于Environment var(类似于$PATH或$SHELL),并且可以/必须由调用者(另一个程序或启动脚本)设置,那么它直接通过-D开关进入System.Properties

    如果是其他内容,则直接转到属性文件(实际上,如何加载并不重要,有几种方法可以实现,每种方法都有优缺点,我最喜欢的是从类路径加载,但这只是一个品味问题)


    我尽量将属性保留在System.Properties中,如果它是一个大的配置,那么它只是最小的、真正重要的东西,更好地使用属性或XML,甚至更好的数据库表,但同样,这取决于应用程序的复杂性(HelloWorld和DB是完全多余的)^^。

    另外,这两个答案都是:您也可以将所有这些结合起来。例如,您可以增加强度,首先检查配置文件,然后检查环境变量,最后检查开关。通过这种方式,您可以通过本地交换机或环境变量覆盖全局应用程序配置。例如,您可以增加强度,首先检查配置文件,然后检查环境变量,最后检查开关。通过这种方式,您可以通过本地交换机或环境变量覆盖全局应用程序配置。小添加:文件用于存储未及时更改的信息,即“静态”值。命令行更适合“动态”值。复杂的应用程序可能会混合使用这些样式(取决于部署需要,如@Nick所说)。小的补充:文件用于存储未及时更改的信息,即“静态”值。命令行更适合“动态”值。复杂的应用程序可能会混合使用这些样式(根据部署需要,如@Nick所说)。