java - 如何在 EAR 或 WAR 之外存储 Java EE 配置参数?

标签 java parameters jakarta-ee war ear

我想在 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/

相关文章:

java - 使用构造函数重载和带有继承的预先存在的静态对象

javascript - "string"=== "string"与 typeof 的优点

java - Spring Boot 安全性 + Thymeleaf : IProcessorDialect class missing

java - 如何让简单的 DAG 在 Hazelcast Jet 中工作?

java - 当字符串以 Z 结尾时将字符串转换为日期格式

java - 使用 servlet 在 Web 浏览器上显示存储在 amazon s3 中的图像

java - Web 服务 Jax WS 编译但无法访问

java - TextSecure 服务器、Signal Android 应用程序和推送服务器配置

android - 如何将参数发送到 android 中 WebView 中的本地文件?

java - JMS 在 jboss 5.x 中是否需要 hsqldb 文件?