您的位置:首页 > 数据库 > Redis

SpringSession集成redis实现session共享(No bean named 'springSessionRepositoryFilter' available)

2017-03-12 15:19 2201 查看
分布式部署架构下传统的session共享有一定的局限性(你来到这儿想必已经受到了其带来的困扰),所以,springsession + redis(NSQL内存数据库)成了当下一个很好很时髦的选择

----Spring
Session provides an API and implementations for managing a user’s session information. 

Pain Point:《http://www.paotuierde.com/(点击打开链接)》

spring
session是一个独立
spring、springMVC 的 HttpSession 管理工具包,在使用的过程中一定要注意!!!在web.xml配置springSessionRepositoryFilter过滤器的时候要指定redis和集成redis配置的配置文件位置,如下面配置代码,我只是将redis和集成redis的配置信息写在了springmvc的配置文件中,不要因为以前配置springmvc没有用到context-param指定springmvc配置文件的加载位置,就不用指定以下配置文件信息,会导致以下错误,让你抓狂:

不注意以上配置信息带来的抓狂错误信息:

三月 12, 2017 3:47:31 下午 org.apache.catalina.core.StandardContext filterStart

SEVERE: Exception starting filter springSessionRepositoryFilter
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSessionRepositoryFilter' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1087)
at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326)
at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4841)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5535)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1263)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1978)
at java
4000
.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
三月 12, 2017 3:47:31 下午 org.apache.catalina.core.StandardContext startInternal
SEVERE: One or more Filters failed to start. Full details will be found in the appropriate container log file
三月 12, 2017 3:47:31 下午 org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/pted] startup failed due to previous errors

spring session集成redis的配置:

1. web.xml

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath:spring/spring-mvc.xml

</param-value>

</context-param>

……

<filter>

<filter-name>springSessionRepositoryFilter</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2. spring-mvc.xml

<!-- scanner redis properties -->
<context:property-placeholder location="classpath:properties/redis.properties" />
<!-- ************************************** -->
<!-- 通过以下配置将spring session 和redis整合到了一起 -->
<bean
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<!-- 过期时间10分钟 -->
<property name="maxInactiveIntervalInSeconds" value="600"></property>
</bean>
<!-- ************************************** -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="xxx.xxx.xxx.xxx" p:pool-config-ref="jedisPoolConfig" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息