Ошибка в сеансе загрузки Spring с Redis — нет подходящего компонента типа [SessionRepository]

Я следую официальному весеннему руководству, чтобы добавить поддержку сеанса Redis в весеннюю загрузку.

http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html

pom.xml

    ...
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.1.RELEASE</version>
    ...
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session</artifactId>
    ... 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-redis</artifactId>
    ...

Я не добавлял версию в весенние сессии, начиная с 1.3.0.RELEASE весенней загрузки, в нее включен jar. Даже добавление версии 1.0.2.RELEASE в соответствии с руководством не решило мою проблему

Обратите внимание, что для spring-boot 1.3.1.RELEASE используется версия spring 4.2.4.RELEASE.

Конфигурация

@EnableRedisHttpSession
public class HttpSessionConfig {
}

Файл свойств

#redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

Я не добавлял секрет, так как пароль моего сервера Redis пуст. Даже добавление пароля не решило мою проблему.

Когда я запускаю приложение, оно выдает следующую ошибку

Вызвано: ..NoSuchBeanDefinitionException: не найден квалифицирующий bean-компонент типа [...SessionRepository] для зависимости: expect...endency. Аннотации зависимостей: {}

Я также добавил полный стек ошибок для справки ниже

016-01-05 01:49:50.775 ERROR 7616 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    ...
    at com.enbiso.proj.estudo.Application.main(Application.java:25) [classes/:na]
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:99) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    ...
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    ... 8 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionRepositoryFilter' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.session.SessionRepository]: : No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:464) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    ...
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_20]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_20]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    ...
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    ... 27 common frames omitted

person Faraj Farook    schedule 04.01.2016    source источник
comment
выложи файл который бинс   -  person Abdelhak    schedule 04.01.2016
comment
Я не понял тебя. Какой bean-файл вам нужен? Что касается Redis, я не создал никаких bean-компонентов. Я что-то пропустил здесь?   -  person Faraj Farook    schedule 05.01.2016
comment
Где определить этот bean-компонент SessionRepository   -  person Abdelhak    schedule 05.01.2016
comment
Он не определен нигде в моем коде. В соответствии с весенней загрузкой, не предполагается ли, что она инициируется самой структурой?   -  person Faraj Farook    schedule 05.01.2016


Ответы (2)


Вам не хватает шага создания RedisConnectionFactory.

Попробуй это :

@EnableRedisHttpSession
public class HttpSessionConfig {
        @Bean
        public JedisConnectionFactory connectionFactory() {
                return new JedisConnectionFactory(); 
        }
}
person joeflux    schedule 22.07.2016

Это шаги, которые я выполнил, чтобы решить эту проблему:

1 - приложение.свойства:

spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=Password123OrSomething
spring.redis.port=1234

2 - пом.xml

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.3.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.3.0.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.4.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3 — Класс конфигурации Redis (весенняя загрузка):

@ConditionalOnProperty(name = "spring.session.store-type", havingValue = "redis")
@EnableRedisHttpSession
public class RedisSessionConfig {

  @Value("${spring.session.store-type}")
  private String sessionStoreType;

  private static final Logger LOGGER = LoggerFactory.getLogger(RedisSessionConfig.class);

  @PostConstruct
  public void init() {
    LOGGER.info("spring.session.store-type=none turns spring session off.");
    LOGGER.info("Redis Session Replication is turned {}.", sessionStoreType.equals("redis") ? "ON"
        : "OFF");
  }

  @Bean
  public ConfigureRedisAction configureRedisAction() {
    LOGGER.info("Preventing auto-configuration in secured environments.");
    return ConfigureRedisAction.NO_OP;
  }
}
person Robson Braga    schedule 15.03.2017