spring-boot - 我不知道为什么会这样。 jedis 创建名称为 'jedisConnectionFactory' 的 bean 时出错

标签 spring-boot redis jedis

运行应用程序后检测到错误。 我找不到任何问题,我需要帮助。

包结构由配置和 Controller 组成。

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:在类路径资源 [com/arthur/springbootredis/config/RedisConfig.class] 中定义名称为“jedisConnectionFactory”的 bean 创建时出错:通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]:工厂方法 'jedisConnectionFactory' 抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: redis/clients/util/SafeEncoder

感谢阅读。

最佳答案

您正在尝试使用 Jedis 3.0.x,它对 Jedis 2.x 提供的 API 进行了重大更改。该异常由 JedisConnectionFactory 抛出,它是 Spring Data Redis 的一部分,在撰写本文时,Spring Data Redis 仅支持 Jedis 2.x。支持 Jedis 3 has been implemented但尚未发布。如果你想使用 Spring Data Redis,你应该暂时坚持使用 Jedis 2.x。对 Jedis 3.0 的支持将在 Spring Data Redis 2.2 中发布,它是 Spring Data Moore 发布系列的一部分,并将包含在 Spring Boot 2.2 中。

关于spring-boot - 我不知道为什么会这样。 jedis 创建名称为 'jedisConnectionFactory' 的 bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54986159/

相关文章:

java - Spring boot 在 servlet 上下文之外获取应用程序基础 url

redis - 在 Redis 中,如何通过从第二个排序集中排除记录来将记录与第一个集分开。?

java - Redis/java - 写入和读取二进制数据

kotlin - Jedis内部向redis服务器发送QUIT请求

java - Spring security在提交表单后返回登录页面

java - 仅在 REST API 调用时出现 Spring Boot 404

java - Springboot 和 Ehcache - MultiCacheException

database - 你将如何获得最后 10 个键的 redis?

中间副本崩溃时的 Redis slaves(replicas) 复制链

java - java中返回的 'Proxy.newProxyInstance()'代理对象是线程安全的吗?