我想在 Web 项目(ear/war 文件)之外存储 Web 项目的配置。 应用程序不应该知道它在哪个容器中运行(WebSphere/JBoss 等)。
处理此问题的最佳方法是什么?
JNDI 是一种干净的方式吗?如果 JNDI 可以解决我的问题,我应该如何配置它? (自定义对象?)
就我而言,SOAP/WS 端点只有简单的 Key=>Value 对(字符串、字符串)。
最佳答案
查看 question用于读取 WAR 文件之外的属性文件。
查看 question用于从 JNDI 读取变量值。我相信这是最好的解决方案。您可以使用以下代码读取字符串变量:
Context initialContext = new InitialContext();
String myvar = (String) initialContext.lookup("java:comp/env/myvar");
以上代码适用于所有容器。在 Tomcat 中,您在 conf/server.xml 中声明以下内容:
<GlobalNamingResources ...>
<Environment name="myvar" value="..."
type="java.lang.String" override="false"/>
</GlobalNamingResources>
以上将创建一个全局资源。也可以在应用程序的上下文中定义资源。在大多数容器中,JNDI 资源可通过 MBeans 管理控制台获得。其中一些提供了一个图形界面来编辑它们。进行更改时,最多需要重新启动应用程序。
如何定义和编辑 JNDI 资源是特定于容器的。应用适当的设置是配置者/管理员的工作。
这些是 JNDI 提供的好处:
- 您可以在 WAR/EAR 文件中定义参数的默认值。
- 参数可以在容器中轻松配置。
- 修改参数值时无需重启容器。
关于java - 如何在 EAR 或 WAR 之外存储 Java EE 配置参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965061/