我使用Spring Session和Redis建立了一个Web服务。 当我调用每个Web服务操作时,会话对象从redis实现,并且当操作完成时,此对象将保存到redis服务器。 当我想要更改会话的值并且同一会话同时运行多个操作时,会出现问题。如果更改会话的操作不是最新完成,则执行更改将丢失(每个操作都会保存自己的会话)。是否可以避免此问题向webservice指示只能保存会话对象的一些特殊操作而不是所有操作?
对我来说错误的代码是这样的:
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,
proxyMode=ScopedProxyMode.TARGET_CLASS)
public class SessionInfo implements Serializable
{
private String sellerName;
public String getSellerName() {
return (sellerName==null) ? "" : sellerName; }
public void setSellerName(String sellerName) {
this.sellerName = sellerName;}
}
如果我调用操作A()
并且它更改卖方名称调用setSellerName()
并且此调用是在执行另一个名为B()
的操作期间加载SessionInfo但不更改它且{ {1}}在A()
之前完成我丢失了卖家名称更改,因为B()
完成时会覆盖B()