JDK1.7 Tomcat8 Redis SV 3.0 Spring3.2.14,Jedis 2.8.1,Spring Session 1.2,Spring Data Redis 1.7
[INFO ][XmlBeanDefinitionReader(loadBeanDefinitions:316)] Loading XML bean definitions [INFO ][DefaultListableBeanFactory(preInstantiateSingletons:603)] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@66039e85: defining beans [redisHttpSessionConfiguration,jedisPoolConfig,jedisConnectionFactory,redisTemplate]; root of factory hierarchyerere [INFO ][ContextLoader(initWebApplicationContext:325)] Root WebApplicationContext: initialization completed in 361 ms [ERROR][StandardContext(filterStart:4592)] Exception starting filter springSessionRepositoryFilter org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSessionRepositoryFilter' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:575)
这是我的日志。我不知道如何解决这个问题。 看起来RedisHttpSessionConfiguration bean已经创建, 为什么还没有定义filter bean?
我无法更改为spring4,因为我的公司不会让我 真正需要您的帮助,谢谢
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- redis --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="127.0.0.1"/> <property name="port" value="6739" /> <property name="password" value="" /> <property name="timeout" value="1800" /> <property name="poolConfig" ref="jedisPoolConfig" /> <property name="usePool" value="true" /> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> </bean> <!-- session redis --> <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"> <property name="maxInactiveIntervalInSeconds" value="1800" /> </bean> </beans>
这是我的配置文件,我的项目使用嵌入式tomcat,并且没有web.xml,我通过添加侦听器和过滤器
ctx.addParameter("contextConfigLocation", "file:"+getHomePath()+"conf/applicationContext.xml"); ctx.addApplicationListener(new ApplicationListener("org.springframework.web.context.ContextLoaderListener",true)); ctx.addApplicationListener(new ApplicationListener("org.springframework.web.context.request.RequestContextListener",true)); org.apache.tomcat.util.descriptor.web.FilterDefspringSessionRepositoryFilterDef =new org.apache.tomcat.util.descriptor.web.FilterDef(); org.apache.tomcat.util.descriptor.web.FilterMap springSessionRepositoryFilterMapper = new org.apache.tomcat.util.descriptor.web.FilterMap(); springSessionRepositoryFilterDef.setFilterName("springSessionRepositoryFilter"); springSessionRepositoryFilterDef.setFilterClass(org.springframework.web.filter.DelegatingFilterProxy.class.getCanonicalName()); ctx.addFilterDef(springSessionRepositoryFilterDef); springSessionRepositoryFilterMapper.setFilterName("springSessionRepositoryFilter"); springSessionRepositoryFilterMapper.addURLPattern("/*"); ctx.addFilterMap(springSessionRepositoryFilterMapper);
非常感谢你
您需要添加<context:annotation-config/>到Spring XML配置中以启用@Configuration类的处理。
<context:annotation-config/>
@Configuration
如您的日志输出中所示,RedisHttpSessionConfiguration当前仅注册为常规bean,但不处理其中的bean定义。
RedisHttpSessionConfiguration