所以我在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());