Я пытаюсь сохранить экземпляры сеанса с разрушением сервера Redis на локальном хосте. Когда я запускаю приложение, я получаю сообщение об ошибке, и приложение не запускается. Похоже, что класс не может быть найден или bean-компонент неправильный, но я не очень хорошо понимаю сообщение об ошибке.
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.739 s <<< FAILURE! - in com.kb.webkb.WebkbApplicationTests
[ERROR] contextLoads(com.kb.webkb.WebkbApplicationTests) Time elapsed: 0.005 s <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisMessageListenerContainer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'redisMessageListenerContainer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'connectionFactory' defined in class path resource [com/kb/webkb/configuration/session/SessionConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'connectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/util/Pool
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'connectionFactory' defined in class path resource [com/kb/webkb/configuration/session/SessionConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'connectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/util/Pool
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'connectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/util/Pool
Caused by: java.lang.NoClassDefFoundError: redis/clients/util/Pool
Caused by: java.lang.ClassNotFoundException: redis.clients.util.Pool
Он использовал Jedis в классе SessionConfiguration для вызова объекта Jedis.
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
@Bean
public JedisConnectionFactory connectionFactory() {
return new JedisConnectionFactory();
}
}
Я пробовал решение из этого поста: stackoverflow.com/q/33128318/11189140
но когда я это сделал, я получил / получаю эту ошибку
Description:
An attempt was made to call the method org.springframework.data.redis.connection.RedisConnection.getConfig(Ljava/lang/String;)Ljava/util/List; but it does not exist. Its class, org.springframework.data.redis.connection.RedisConnection, is available from the following locations:
jar:file:/home/kbuczynski/.m2/repository/org/springframework/data/spring-data-redis/2.1.5.RELEASE/spring-data-redis-2.1.5.RELEASE.jar!/org/springframework/data/redis/connection/RedisConnection.class
It was loaded from the following location:
file:/home/kbuczynski/.m2/repository/org/springframework/data/spring-data-redis/2.1.5.RELEASE/spring-data-redis-2.1.5.RELEASE.jar
ПОМ.XML
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.kb</groupId>
<artifactId>webkb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>webkb</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@AnirudhSimha Я нашел это решение и попробовал его, но получил другую ошибку. Я редактирую свой пост, чтобы вы могли видеть причину сбоя.




В вашем сообщении об ошибке есть NoClassDefFoundError: redis/clients/util/Pool, который находится в redis/clients/jedis/util/Pool, начиная с Jedis 3.
Пожалуйста, проверьте свои (управляемые) зависимости (mvn dependency:tree), если вы действительно все еще используете Jedis в версии 2.x.
По крайней мере, Весенние данные Redis 2.1.x использует Jedis 2.9.3, где redis/clients/util/Pool еще действует. Поэтому я подозреваю конфликтные зависимости в вашем случае.
Приложение:
Спасибо, что поделились также своим проект. Теперь совершенно ясно, что происходит.
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.2.2.RELEASE</version>
</dependency>
Обратите внимание, что это управляемая зависимость Spring Boot, однако вы заставили его быть в версии 1.2.2.RELEASE. Удалите это из ваших зависимостей, spring-session-data-redis делает все, что вам нужно.
Я выполнил это, а также интеграционный тест в своем разветвленном репо и создал для вас пул реквест.
Пожалуйста, убедитесь, что это также работает для вас!
Похоже, я использую [INFO] +- org.springframework.session:spring-session-data-redis:jar:2.1.4.RELEASE:compile [INFO] | +- org.springframework.data:spring-data-redis:jar:2.1.5.RELEASE:compile [INFO] \- org.springframework.boot:spring-boot-starter-data-redis:jar:2.1 .3.RELEASE:compile Идея, как это исправить, если есть проблема? Я не очень понимаю, как это исправить.
Ваша точная конфигурация и зависимости в вашем pom.xml работают здесь для меня. Когда я спрашиваю mvn dependency:tree, он показывает среди прочего следующее: [INFO] +- redis.clients:jedis:jar:2.9.1:compile — можете ли вы проверить это?
Привет, я создал новый проект, повторно используя предоставленный файл pom.xml. Мне удается избавиться от надоедливой ошибки, однако я застрял в ней. Была предпринята попытка вызвать метод org.springframework.data.redis.connection.RedisConnection.getConfig(Ljava/lang/String;)Ljava/util /Лист; но его не существует. Его класс org.springframework.data.redis.connection.RedisConnection доступен из следующих мест: Предлагается исправить путь к классам, чтобы он содержал единую совместимую версию Spring Reddis. Любые предложения, как это сделать?
Не могли бы вы поделиться своим новым проектом, может быть, на Github?
Удивительно, я посмотрю на это через несколько часов и сейчас уверен. Потому что здесь чуть за полночь, первые несколько часов сна. :-)
Этот ответ мне очень помог! Мне также помогает следующая ссылка: docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
Кажется, здесь уже дан ответ: stackoverflow.com/q/33128318/11189140