web-dev-qa-db-ja.com

Spring Redisを使用しているときにJedisConnectionのNoClassDefFoundエラーが発生する理由

こんにちは、春-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;

この例外が発生する理由を誰かが知っている場合は、提案してください。

13
Anand j. Kadhi

ほぼ1日を浪費し、jarがすでにクラスパス上にあることを確認した後、さらにデバッグして、Javaのリフレクションメカニズムが「メソッドリスト」にすでに存在するメソッドを見つけようとしたときに、見つけられなかったことがわかりました。 Jedisバージョン(2.7.2)とSpring Data Redis(1.5.0.RELEASE)との間に互換性がないため、この問題はすでに発生しています。このリンクで回答::
JedisとSpringのデータredisバージョンの競合

9
Anand j. Kadhi

Jedis Configurationを使用する場合、JedisPoolConfigが必要です。 Spring Boot 2.0では、spring-boot-starter-data-redisはデフォルトでJedisではなくLettuceの依存関係を提供します。 Jedis構成を使用するには、Letuceを除外し、次のように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>
5
Sachin Sridhar

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クライアントのプールクラスを呼び出す場合、Java.lang.NoClassDefFoundError

最新のようですspring-data-redis:2.1.10.RELEASEまだ古いパッケージ構造でredisクライアントのプールクラスを呼び出すため、redis.clientsを使用する必要があります2.10.2

3
Thang Le

互換性のあるバージョンに変更します。

<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>
1
AnirbanDebnath

クラス_org.springframework.data.redis.connection.jedis.JedisConnection_がクラスパスにありません。この依存関係が利用可能かどうか、不足している場合は含めてください。

欠落しているjarは、次のように Mavenリポジトリーredisページ のように、Redisバージョンを指定する必要があるため、spring-data-redist-(your-version).jarの形式になります。

0
abarisone