Java中的命令行参数与文件属性(*.properties)与系统属性(-D)
有许多方法可以将参数传递给Java应用程序。其中包括: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?取决于解决其中一些问题的部署需要
Properties
-style)-D
选项传递)或者,例如,可以从堆栈深处的任何类轻松访问系统变量(与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所说)。