1

我有一个 Java Web 应用程序,它在许多服务器上运行。此应用程序中的一些 servlet 在启动时加载以预加载一些数据。加载此数据的协议将根据应用程序部署在哪个服务器上而改变。(要加载的文件的路径会发生变化,而且安全性也存在差异,因此获取一些文件比其他文件更复杂)。有没有一种方法可以在 java servlet 的 init 函数中唯一标识我的应用程序所在的服务器/机器?我原本是一起工作的HttpServletRequest.getServerName(),这已经足够了,但它在 init 中不可用。我知道延迟初始化,所以不要告诉我这样做,如果可能的话,我会尽量避免这种情况,因为这些文件的加载时间很长。如果我能找到完美的机器名称,但我不知道如何从 api 中得到它。我所需要的只是一种从初始化中唯一识别机器的方法。

谢谢你的帮助。

4

3 回答 3

2

与其让我的应用程序依赖于一组(硬编码的)IP,不如使用绑定到 JNDI 的简单字符串属性来识别每个服务器。

硬编码 IP/主机名通常不是一个好主意。部署应用程序后,可能会立即更改基础架构 :)

另一方面,JNDI 是获取应用服务器资源的标准方式。将资源(字符串属性)绑定到 JNDI 可以在 WAS 管理控制台中完成,并且从 JNDI 获取属性值很容易。IBM 甚至发布了一个关于此的教程

于 2012-07-31T16:15:05.843 回答
1

也许一种方法是使用以下命令检查主机的名称:

java.util.InetAddress.getLocalHost().getHostName()
于 2012-07-31T15:40:21.187 回答
1

我曾经有过类似的要求,我们使用了系统属性。基本上,您使用 -D 参数在服务器的启动命令中定义属性:

-DserverId=serverA

然后在您的 servlet 中,您可以使用以下命令访问它:

System.getProperty("serverId")

您只需给每个服务器启动一个不同的 id。

希望这可以帮助。

于 2012-07-31T15:48:09.930 回答