2014-11-01 45 views
0

所以我在Heroku上部署了2個節點的Spring應用程序,我注意到如果我在籃子中添加一個產品並開始刷新購物車頁面,有時我會看到產品,有時候會看到產品不在這裏。所以我在想,也許每次請求都會碰到不同的節點。春季Session在Paas Sticky Session

在春季會議網站上,我可以看到This can make clustering much easier. This is nice because the clustering setup is done in a vendor neutral way. Furthermore, in some environments (i.e. PaaS solutions) developers cannot modify the cluster settings easily.但我找不到如何爲spring-session進行粘滯會話的設置。我的設置是隻箱子的一個OUF:

@Bean(name = { "defaultRedisSessionRepository", "sessionRepository" }) 
@ConditionalOnProperty(name = { "nemesis.platform.redis.url" }) 
public SessionRepository defaultRedisSessionRepository(RedisTemplate<String,ExpiringSession> redisTemplate) throws Exception { 
    return new RedisOperationsSessionRepository(redisTemplate); 
} 

然後在我的MVC配置:

@Bean(name = {"defaultSessionFilter", "sessionFilter"}) 
public Filter sessionFilter() { 
    CompositeFilter compositeFilter = new CompositeFilter(); 
    compositeFilter.setFilters(Arrays.asList(new SessionRepositoryFilter(applicationContext.getBean("sessionRepository", SessionRepository.class)), applicationContext.getBean(UrlEncoderFilter.NAME, UrlEncoderFilter.class))); 

    return compositeFilter; 
} 

,然後在我的WebApplicationInitializer

final FilterRegistration sessionFilterChainReg = servletContext.addFilter("sessionFilter", DelegatingFilterProxy.class); 
    sessionFilterChainReg.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.ASYNC, DispatcherType.FORWARD, DispatcherType.INCLUDE), false, dispatcherServletReg.getName()); 

回答

1

春季會議沒有設置粘會話。相反,它允許任何JVM通過將其放置在中央數據存儲區(即Redis)中來查找會話對象。