当尝试使用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;
请建议如果有人知道为什么我得到这个异常。
浪费了几乎一天,发现jar已经在我的类路径上,我进一步调试了它,发现当java的反射机制试图找到一个方法已经存在于"方法列表"中,它无法找到由于一些版本冲突Jedis版本(2.7.2)不兼容Spring Data Redis (1.5.0.RELEASE),这个问题已经在这个链接中回答::
Jedis和spring数据redis版本冲突
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。客户 2.10.2
当我们使用jedi Configuration时,需要JedisPoolConfig。在Spring Boot 2.0中,Spring - Boot -starter-data-redis默认给予Lettuce依赖,而不是jedi。要使用绝地武士的配置,请排除Lettuce并添加绝地武士,如下所示。
<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>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
最新版本的Redis客户端解决了我的问题。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version>
</dependency>
更改为兼容版本:
<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>
当我们使用jedi Configuration时,需要JedisPoolConfig。在Spring Boot 2.0中,Spring - Boot -starter-data-redis默认给予Lettuce依赖,而不是jedi。要使用绝地武士的配置,请排除Lettuce并添加绝地武士,如下所示。
<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>
类org.springframework.data.redis.connection.jedis.JedisConnection
不在您的类路径中。请检查您是否有这个依赖项可用,如果没有,请包含它。
缺失的jar应该是,给定你的redis版本,像这样从Maven仓库redis页面,所以在形式spring-data-redist-(your-version).jar