Java 其中使用多个服务器存储上下文属性(J2EE)

Java 其中使用多个服务器存储上下文属性(J2EE),java,jakarta-ee,web-deployment,Java,Jakarta Ee,Web Deployment,我目前正在使用JavaEE和Tomcat服务器开发一个Wepapp。我使用的上下文属性如下: ServletContext context = getServletConfig().getServletContext(); String defaultUser = (String) context.getAttribute("default_user"); 但最近我读到,当您在多个服务器上部署webapp时,不建议使用上下文属性 这是真的吗? 我怎样才能解决这个问题?也许我将来会使用几个服务器

我目前正在使用JavaEE和Tomcat服务器开发一个Wepapp。我使用的上下文属性如下:

ServletContext context = getServletConfig().getServletContext();
String defaultUser = (String) context.getAttribute("default_user");
但最近我读到,当您在多个服务器上部署webapp时,不建议使用上下文属性

这是真的吗? 我怎样才能解决这个问题?也许我将来会使用几个服务器(AWS或其他东西)

谢谢

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

例如,请参见,这解释了问题:

在容器分布在许多虚拟机上的情况下,Web应用程序将为每个JVM提供一个ServletContext实例

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


你在哪里读到的?我读了很多文档。我记不起我在哪里(在我读的大量报纸中)找到的。这可能是错误的,因此,我的“default_user”ServletContext属性可以工作。我猜它会在每个服务器之间复制,不是吗?@Ommadawn不,上下文属性不会被复制。“上下文属性是创建它们的JVM的本地属性。这会阻止ServletContext属性成为分布式容器中的共享内存存储。”因此,简单地说:如果我只在上下文只读属性中存储,会有问题吗?我不能很好地理解它…@Ommadawn问题是上下文属性没有在服务器之间分发/复制。如果你不需要,那么你就没有问题了。通常建议不要使用上下文属性,因为它们不是分布式的,因为大多数用途是存储共享的可更新值。我只是想用它们来存储只读值,所以我想我应该不会有问题(我希望如此)。谢谢