我有一个java Web应用程序,它运行在许多服务器上。此应用程序中的某些servlet在启动时加载以预加载某些数据。用于加载此数据的协议将根据部署应用程序的服务器而更改。 (要加载的文件的路径发生变化,安全性也有差异,因此获取某些文件比其他文件更复杂)。有没有办法可以在java servlet的init函数中唯一地标识我的应用程序所在的服务器/机器?我原来正在使用HttpServletRequest.getServerName(),
这已经足够了,但它在init中不可用。我知道延迟初始化,所以不要告诉我这样做,我试图避免这种情况,因为这些文件的加载时间很重要。如果我能找到完美的机器名称,但我无法弄清楚如何从api中取出它。我只需要一种从init中唯一标识机器的方法。
感谢您的帮助。
答案 0 :(得分:2)
我不是让我的应用程序依赖于(硬编码的)IP集合,而是使用绑定到JNDI的简单String属性来标识每个服务器。
硬编码IP /主机名通常不是一个好主意。基础架构的更改可能在您部署应用程序后立即发生:)
另一方面,JNDI是获取appserver资源的标准方法。将资源(字符串属性)绑定到JNDI可以在WAS管理控制台中完成,从JNDI获取属性值很容易。 IBM甚至还提到了published a tutorial。答案 1 :(得分:1)
也许一种方法是使用以下方法检查主机的名称:
java.util.InetAddress.getLocalHost().getHostName()
答案 2 :(得分:1)
我有一个与此类似的要求,我们使用了系统属性。基本上,您使用-D参数在服务器的启动命令中定义属性:
-DserverId=serverA
然后在您的servlet中,您可以使用以下命令访问它:
System.getProperty("serverId")
您只需为每个服务器启动提供不同的ID。
希望这有帮助。