这是一个奇怪的问题,但将变量定义为系统属性(如
)是否有任何优势new
在Spring应用程序属性中定义它。什么更可取?
答案 0 :(得分:3)
可以使用系统属性,但请记住它可以影响不同的程序,将它们视为常量(永不改变)会很有用,但Spring属性只能为您的java应用程序提供特殊配置。
在同一主机上,您可以运行不同的Java应用程序。如果您需要不同的属性,则无法使用系统属性(具有相同的名称)。
答案 1 :(得分:1)
如果您在application.properties
中定义属性,则您的distributable(JAR或WAR)是自包含的,并且无论如何运行,都知道自己的配置。
如果通过命令行(java -Dxxx=yyy
)定义属性,则必须配置运行可分发的任何内容(例如,Web容器,脚本等)。
在实践中,您最终可能会将两者结合起来:
通过命令行定义应用程序属性的一个常见情况是满足环境/主机特定属性,但Spring profiles提供了一种用于定义特定于环境的属性的有用机制。
我建议起点应该是在Spring属性文件中定义所有特定于应用程序的配置,并且只有在发现令人信服的理由时才会偏离这一点。一个常见的理由是,扩展应用程序配置(其中一些在application.properties中,其中一些在脚本或env文件中)可能使开发人员/ devops /支持团队更难理解/增强/管理/支持您的应用