你好在尝试使用spring-redis时我得到了
java.lang.NoClassDefFoundError: Could not initialize class org.springframework.data.redis.connection.jedis.JedisConnection
使用redis进行任何连接操作时出现异常。我的配置方法就像这样
@Bean
public RedisConnectionFactory jedisConnFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("XXX.XX.XX.XXX");
jedisConnectionFactory.setPort(6381);
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
如果有人知道为什么我会收到这个例外,请建议。
答案 0 :(得分:5)
浪费了差不多一天后发现jar已经在我的课程路径上了,我进一步调试了它,发现当java的反射机制试图找到一个已经存在于&#34中的方法时;方法列表"由于 Jedis版本(2.7.2)与Spring Data Redis(1.5.0.RELEASE)不兼容之间的某些版本冲突无法找到,此问题已在此链接中得到解答: :
Jedis and spring data redis version conflict
答案 1 :(得分:4)
当我们使用Jedis配置时,需要使用JedisPoolConfig。在Spring Boot 2.0中,默认情况下spring-boot-starter-data-redis赋予Lettuce依赖关系,而不是Jedis。要使用Jedis配置,请排除莴苣并按以下方式添加Jedis。
<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>
答案 2 :(得分:3)
Redis客户端仍保留旧软件包结构的最新版本是:2.10.2。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.10.2</version>
</dependency>
从3.0.x开始,程序包结构已更改。如果spring-data-redis用旧的包结构调用redis客户端的Pool类,则 java.lang.NoClassDefFoundError
似乎最新的 spring-data-redis:2.1.10.RELEASE 仍使用旧程序包结构调用redis客户端的Pool类,因此您需要使用redis.clients 2.10.2
答案 3 :(得分:2)
最新版本的 Redis 客户端解决了我的问题。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version>
</dependency>
答案 4 :(得分:0)
类org.springframework.data.redis.connection.jedis.JedisConnection
不在您的类路径中。请检查您是否具有此依赖项,如果缺少该依赖项,请将其包括在内。
根据你的redis版本,丢失的jar应该来自Maven repository redis page,因此格式为spring-data-redist-(your-version).jar
答案 5 :(得分:0)
更改为兼容版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
答案 6 :(得分:0)
当我们使用Jedis配置时,需要使用JedisPoolConfig。在Spring Boot 2.0中,默认情况下spring-boot-starter-data-redis赋予Lettuce依赖关系,而不是Jedis。要使用Jedis配置,请排除莴苣并按以下方式添加Jedis。
<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>