2017-07-18 156 views
1

这是一种奇怪的问题,但是否有定义一个变量为系统属性等的任何优势,春属性文件VS系统属性

System.getProperty("files-dir", System.getProperty("user.home") + "/uploaded-files"); 

在里面定义的Spring应用的性能吧。更可取的是什么?

回答

1

如果您在application.properties定义属性,然后您分发(将JAR或WAR)是自包含的,认识到其自身的配置,无论如何运行它。

如果您通过命令行(java -Dxxx=yyy)定义属性,那么您必须配置运行可分发组件的任何内容(例如Web容器,脚本等)。

在实践中,你可能最终与两者的某种组合:您可分配

  • 应用程序配置属性之外定义

    • JVM配置属性(例如最小,最大堆设置)(例如日志目录,DB连接细节等)内定义了分配

    用于经由命令行定义应用属性的常见的情况是,以应付环境/承载特定性质,但Spring profiles提供了定义环境特定属性的有用机制。

    我建议起点应该是在Spring属性文件中定义所有特定于应用程序的配置,并且只有在发现令人信服的原因时才会偏离这一点。一个普遍的理由是,围绕你的应用程序配置(一些应用程序在application.properties中,一些在脚本或env文件中)可能会使开发人员/开发人员/支持团队难以理解/增强/管理/支持你应用。

  • +0

    The代码实际上是由其他开发人员编写的。我不希望将该属性定义为系统属性,并且这个应用程序也没有理由这样做。但我没有任何理由宣称这是不好的,并改变它。有任何想法吗? – Imran

    +0

    我已经为答案添加了一个理由,请参阅“这是一个常见的基本原理是......” – glytching

    3

    可以使用系统属性,但要记住它可以影响不同的程序,并将它们视为常量(永远不会更改),但Spring属性只能为您的Java应用程序提供特殊配置。

    在同一主机上,您可以运行不同的Java应用程序。如果您需要不同的属性,则不能使用系统属性(具有相同的名称)。

    +0

    你似乎混淆了环境变量和系统属性。 在Java中,System.getProperties()返回传递给java命令的属性,并带-D选项,如:-DmySystemProperty = myValue,因此它不会影响另一个Java应用程序..相反,如果它们属于同一个应用程序服务器。 – Donatello