【发布时间】:2018-09-25 23:25:41
【问题描述】:
在像 tomcat 这样的 servlet 容器中运行应用程序时,我有多种方法可以将自定义配置传递给应用程序:
- 系统属性(在启动时作为 -D 参数传递)
- 上下文参数(web.xml 或 context.xml)
- 环境变量(操作系统范围)
虽然我对环境变量的优缺点充满信心,但我看不出系统属性和上下文参数的区别、优缺点。两者都可以在应用程序中轻松检索和设置。那么上下文参数存在的权利是什么?为什么不简单地将系统属性用于所有内容?
【问题讨论】:
-
因为它们中的一些可能在所有机器中都相似,并且您不想强迫用户通过它们。您只需在 xml 中设置它们并根据上下文(而不是您正在运行的系统/机器)更改它们。环境很好,但它们是为所有 Java 应用程序共享的。系统属性介于两者之间。例如,如果您有 3 个 Java 应用程序并且您想使用不同的内存设置运行它们 - 您使用系统属性。
-
@VeselinDavidov 您说的是 webapp (META-INF/context.xml) 中的 context.xml,对吗?所以这就像 webapp 定义的默认值,可能会被自定义系统属性覆盖。所以是不是还是很相似?对不起,但我仍然看不到上下文参数的用例/优势,这是系统属性无法实现的:(
-
这里的想法是开发人员不必控制容器的 Java 系统属性。特别是在过去,一方面有单独的团队开发应用程序,另一方面提供/运行 JEE 容器基础设施。在一个容器中运行多个应用程序也很常见。在这种情况下,提供/运行团队还没有准备好更改整个容器的系统属性。也可能有一个软件提供商提供了一个战争文件,他们不能/不会为客户的容器规定系统环境。