当Redis不可用时,java使用默认的Spring会话
上下文:我正在尝试使用Spring的Redis会话来保存云上多个Tomcat的会话。但在某些环境下,Redis将不可用。我想配置一种方法,使我的应用程序能够根据运行时的环境返回默认实现
当我的环境中没有Redis时,我无法找到恢复默认spring会话配置的正确方法
我正在使用:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
当我扩展一个类时,我可以使用Redis会话(默认配置),如下所示:
public class RedisHttpSessionApplicationInitializer extends
AbstractHttpSessionApplicationInitializer {
}
当Redis不可用时,我尝试使用我的RedisHttpSessionApplicationInitializer
的构造函数来加载SpringHttpSessionConfiguration
,并在
SpringHttpSessionConfiguration和EnableSpringHttpSession
所以我做了如下修改:
public class RedisHttpSessionApplicationInitializer extends
AbstractHttpSessionApplicationInitializer {
public RedisHttpSessionApplicationInitializer(){
super(SpringHttpSessionConfiguration.class);
}
}
以及:
@Bean
public SessionRepository<MapSession> sessionRepository() {
return new MapSessionRepository(new HashMap<>());
}
我仍然得到如下错误:
ERROR 921 [Thread 19] org.springframework.web.context.ContextLoader -
Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'springSessionRepositoryFilter' defined
in org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration: Unsatisfied dependency expressed through method
'springSessionRepositoryFilter' parameter 0; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type
'org.springframework.session.SessionRepository<?>' available: expected
at least 1 bean which qualifies as autowire candidate. Dependency
annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:458)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1249)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1098)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBea
你能建议我试一下我的用例吗?另外,如果你需要我提供更多信息,请告诉我
# 1 楼答案
我能够解决的方法是使用
CustomRedisHttpSessionConfiguration
此外,为了初始化我的应用程序,我使用了以下命令: