Я не знаю, почему это происходит.jedis Ошибка создания бина с именем 'jedisConnectionFactory' - PullRequest
0 голосов
/ 04 марта 2019

Обнаружена ошибка после запуска приложения.Я не могу найти никаких проблем, и мне нужна помощь.

Структура пакета состоит из конфигурации и контроллера.

spring-boot-starter-data-redis redis.clients jedis 3.0.1

package com.arthur.springbootredis.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;

@Configuration
public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {

        JedisConnectionFactory jedisConnectionFactory = null;

        try {
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
            redisStandaloneConfiguration.setDatabase(0);
            redisStandaloneConfiguration.setHostName("localhost");
            redisStandaloneConfiguration.setPort(6379);

            jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);

            jedisConnectionFactory.getPoolConfig().setMaxTotal(50);
            jedisConnectionFactory.getPoolConfig().setMaxIdle(50);
        } catch (RedisConnectionFailureException e) {
            e.getMessage();
        }

        return jedisConnectionFactory;
    }


    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
        template.setEnableTransactionSupport(true);
        return template;
    }
}

Ниже приведено содержание ошибки

org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'jedisConnectionFactory', определенного в ресурсе пути к классу [com / arthur / springbootredis/config/RedisConfig.class]: не удалось создать экземпляр компонента с помощью фабричного метода;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: метод фабрики 'jedisConnectionFactory' вызвал исключение;вложенное исключение - java.lang.NoClassDefFoundError: redis / clients / util / SafeEncoder

Спасибо за чтение.

1 Ответ

0 голосов
/ 05 марта 2019

Вы пытаетесь использовать Jedis 3.0.x, который вносит серьезные изменения в API, предоставленный Jedis 2.x.Исключение выдается JedisConnectionFactory, который является частью Spring Data Redis, и на момент написания Spring Data Redis поддерживает только Jedis 2.x.Поддержка Jedis 3 была реализована , но еще не выпущена.Если вы хотите использовать Spring Data Redis, вам следует пока придерживаться Jedis 2.x.Поддержка Jedis 3.0 будет выпущена в Spring Data Redis 2.2, который является частью последовательности выпуска Spring Data Moore и будет включен в Spring Boot 2.2.

...