使用多个服务器(J2EE)在哪里存储上下文属性

时间:2019-03-28 18:13:01

标签: java java-ee web-deployment

我目前正在使用Java EE和Tomcat Server开发Wepapp。我正在使用上下文属性,例如:

ServletContext context = getServletConfig().getServletContext();
String defaultUser = (String) context.getAttribute("default_user");

但是最近我读到,当您在多台服务器中部署Web应用程序时,不建议使用上下文属性。

是真的吗? 我该如何解决?也许将来我会使用几台服务器(AWS或其他工具)。

谢谢!

PS:我实际上仅将上下文属性用于只读目的,只需读取配置参数即可。

1 个答案:

答案 0 :(得分:2)

例如请参阅Servlet Context in Clustered Environment,其中说明了问题:

  

如果容器分布在许多虚拟机上,则Web应用程序将为每个JVM都有一个ServletContext实例。

     

上下文属性对于创建它们的JVM是本地的。这样可以防止ServletContext属性成为分布式容器中的共享内存存储。当需要在分布式环境中运行的servlet之间共享信息时,应将这些信息放置在session中,存储在数据库中或在Enterprise JavaBeans组件中设置。如果要跨多个JVM处理会话属性,则它们必须是可序列化的,这是群集的要求。可以通过将会话属性的某些字段声明为临时字段来使其不集群。