繁体   English   中英

在java servlet的init中唯一标识服务器的好方法是什么

[英]What is a good way to uniquely identify a Server in the init of a java servlet

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

谢谢你的帮助。

我不是让我的应用程序依赖于(硬编码的)IP集合,而是使用绑定到JNDI的简单String属性来标识每个服务器。

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

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

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

java.util.InetAddress.getLocalHost().getHostName()

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

-DserverId=serverA

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

System.getProperty("serverId")

您只需为每个服务器启动一个不同的ID。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM