我有一个使用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但不更改它并且 A()
在 B()
之前完成我丢失了卖家名称更改因为 B()
完成它覆盖由 A()
设置的值