Сессия Redis с загрузкой Java Spring

Я пытаюсь сохранить экземпляры сеанса с разрушением сервера 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>

Кажется, здесь уже дан ответ: stackoverflow.com/q/33128318/11189140

Anirudh Simha 15.03.2019 13:52

@AnirudhSimha Я нашел это решение и попробовал его, но получил другую ошибку. Я редактирую свой пост, чтобы вы могли видеть причину сбоя.

NashPL 15.03.2019 14:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
6 279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем сообщении об ошибке есть 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:compil‌​e Идея, как это исправить, если есть проблема? Я не очень понимаю, как это исправить.

NashPL 16.03.2019 00:42

Ваша точная конфигурация и зависимости в вашем pom.xml работают здесь для меня. Когда я спрашиваю mvn dependency:tree, он показывает среди прочего следующее: [INFO] +- redis.clients:jedis:jar:2.9.1:compile — можете ли вы проверить это?

mle 16.03.2019 14:21

Привет, я создал новый проект, повторно используя предоставленный файл pom.xml. Мне удается избавиться от надоедливой ошибки, однако я застрял в ней. Была предпринята попытка вызвать метод org.springframework.data.redis.connection.RedisConnection.ge‌​tConfig(Ljava/lang/S‌​tring;)Ljava/util /Ли‌​ст; но его не существует. Его класс org.springframework.data.redis.connection.RedisConnection доступен из следующих мест: Предлагается исправить путь к классам, чтобы он содержал единую совместимую версию Spring Reddis. Любые предложения, как это сделать?

NashPL 19.03.2019 00:03

Не могли бы вы поделиться своим новым проектом, может быть, на Github?

mle 19.03.2019 00:08

Удивительно, я посмотрю на это через несколько часов и сейчас уверен. Потому что здесь чуть за полночь, первые несколько часов сна. :-)

mle 19.03.2019 00:14

Этот ответ мне очень помог! Мне также помогает следующая ссылка: docs.spring.io/spring-boot/docs/current/reference/htmlsingle‌​/…

Diego dos Santos 26.09.2019 19:23

Другие вопросы по теме