Java 在Web应用程序中,将特定于用户的数据存储在静态变量中是否可行
我正在开发一个WebApplication,一次可以有近7000个用户同时访问 因此,在这个Web应用程序中,我使用以下逻辑 当用户成功登录时,我将在ArrayList中存储与他相关的信息,如图所示 第1类:Java 在Web应用程序中,将特定于用户的数据存储在静态变量中是否可行,java,Java,我正在开发一个WebApplication,一次可以有近7000个用户同时访问 因此,在这个Web应用程序中,我使用以下逻辑 当用户成功登录时,我将在ArrayList中存储与他相关的信息,如图所示 第1类: if(successfullyloggedin) { ArrayList accounts = getInfoForUser(customerId); userinfo.accountsinfor = accounts; } public ArrayList getInfoFor
if(successfullyloggedin)
{
ArrayList accounts = getInfoForUser(customerId);
userinfo.accountsinfor = accounts;
}
public ArrayList getInfoForUser(String custId)
{
ArrayList users = getDataFromDatabase();
return users;
}
第2类:
public class UserInfo {
public static ArrayList accountsinfor;
}
第3类:
类别3是一个服务类别,它检查用户是否在场或不打电话
class services
{
public String MakeCall(String Id)
{
ArrayList accounts = UserInfo.accountsinfor;
if(!ID.contains(accounts ))
// Throw an Exception
}
else
{
// Its fine
}
}
请告诉我,我是否可以在一个一次有近7000个用户同时使用的webapplication中使用这个逻辑。
我关心的是使用静态变量
或者,请建议是否更适合继续进行此操作。因为它是一个web应用程序,我会为每个用户创建一个会话,并将其特定信息放在其中。这就是它的目的
您不需要说明信息是什么:凭据、ACL等。如果您的数据结构选择清楚,就更容易对其进行评论。不清楚您的arraylist是否包含用户信息或用户列表,如makeCall,在其中查找“ID” 无论如何,在并发环境中将内容存储在静态变量中通常是个坏主意。如果您在web应用程序中,我建议您将用户信息作为属性存储在HttpSession中:
最好的方法是使用HttpSession并让容器为您处理。
只需使用
@SessionScoped
(当然这取决于您使用的框架)为您保存用户信息的类添加注释,让容器为您处理所有事情。而不是进行容易出错的设计;) 最初我想到了这一点,但如果一个用户使用两个LoginID登录,比如在Mozilla中,浏览器会为这两个用户创建相同的sessionId,因此第二个登录用户会覆盖信息。您希望阻止同一用户同时进行两个会话。我无法更改业务功能,作为一个用户,有两个LoginID是正确的,例如JointaccountOK,然后使用它。如果是同一个用户,覆盖了他们自己的信息,那么这就是他们的问题。他们不应该登录两次。也许您还希望有一个合理的会话超时。30分钟对任何人来说都应该足够了。