Spring属性文件与系统属性

时间:2017-07-18 15:42:51

标签: java spring spring-boot

这是一个奇怪的问题,但将变量定义为系统属性(如

)是否有任何优势
new

在Spring应用程序属性中定义它。什么更可取?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

如果您在application.properties中定义属性,则您的distributable(JAR或WAR)是自包含的,并且无论如何运行,都知道自己的配置。

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

在实践中,您最终可能会将两者结合起来:

  • 在可分发
  • 之外定义的JVM配置属性(例如,最小,最大堆设置)
  • 可分发
  • 中定义的应用程序配置属性(例如,日志目录,数据库连接详细信息等)

通过命令行定义应用程序属性的一个常见情况是满足环境/主机特定属性,但Spring profiles提供了一种用于定义特定于环境的属性的有用机制。

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