web-dev-qa-db-ja.com

SpringデータredisのredisTemplateの接続を取得できません

Jedisを使用してSpringデータRedisを使用してチャネルにメッセージを公開しようとしています。これは非常に単純なJava config:

@Bean(name="jedisConnectionFactory")
JedisConnectionFactory jedisConnectionFactory() {
    JedisConnectionFactory factory = new JedisConnectionFactory();
    factory.setHostName(redisHostName);
    factory.setPort(redisPort);
    factory.setUsePool(true);
    return factory;
}

@Bean(name="redisTemplate")
RedisTemplate<Object, Object> redisTemplate() {
    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
    redisTemplate.setConnectionFactory(jedisConnectionFactory());
    return redisTemplate;
}

ここで、redisPort = 6379およびredisHostName = "localhost"です。

次のテストを実行すると:

 @Test
public void testRedis(){
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    RedisTemplate<Object,Object> redisTemplate = (RedisTemplate<Object, Object>) context.getBean("redisTemplate");
    redisTemplate.convertAndSend("test", "123");
}

次のスタックトレースを取得します。

Java.lang.ExceptionInInitializerError
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.Java:252)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.Java:58)
at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.Java:128)
at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.Java:91)
at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.Java:78)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.Java:178)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.Java:153)
at org.springframework.data.redis.core.RedisTemplate.convertAndSend(RedisTemplate.Java:676)
at com.jobvite.realtimeanalytics.redis.RedisTest.testRedis(RedisTest.Java:22)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.Java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.Java:73)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.Java:82)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.Java:73)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:271)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:224)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:83)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.Java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.Java:68)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.Java:163)
at org.Apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.Java:252)
at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:141)
at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:112)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.Apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.Java:189)
at org.Apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.Java:165)
at org.Apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.Java:85)
at org.Apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.Java:115)
at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:75) 
Caused by: Java.lang.NullPointerException
at org.springframework.util.ReflectionUtils.makeAccessible(ReflectionUtils.Java:443)
at org.springframework.data.redis.connection.jedis.JedisConnection.<clinit>(JedisConnection.Java:108)
... 44 more
7
Navin Viswanath

この問題は、Spring Data Redis(1.5.0.RELEASE)と互換性のないJedisバージョン(2.7.2)が原因で発生します。この投稿とコメントに触発される前に、同じ問題に直面して3日間を過ごしました。 Jedisバージョン(2.6.2)は正常に動作しています(プログラムで他のエラーが発生しましたが、少なくとも同じエラーメッセージよりもある程度進行しています)。

ありがとう。

17
kwky

Jedis 2.7.2を使用していたことが判明しましたが、Spring Data Redis1.5.0はJedis2.6.2と互換性があるようです。どういうわけか、これがドキュメントでもう少し明確になっているといいのですが。

5
Navin Viswanath

互換性のあるバージョン:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.5.0.RELEASE</version>
</dependency>
2
stefli

私も同様の問題に直面しました。私はいくつかの調査をしました、そしてそれが瓶の衝突によるものであることがわかりました。

互換バージョンアプリケーションで使用しているのは:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.8.10.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

または、spring bootを使用している場合は、次の依存関係を追加するだけです。 Spring Bootは、このような問題を自動解決するのに十分スマートです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

お役に立てば幸いです!!

2
user2252882

バージョン、私は同じ問題に遭遇しました、この春-data-redis 1.5.0 pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>1.5.0.RELEASE</version>
  <name>Spring Data Redis</name>
  <description>Spring Data Redis</description>
  <url>http://github.com/spring-projects/spring-data-redis</url>
  <organization>
    <name>Pivotal Software, Inc.</name>
    <url>http://projects.spring.io/spring-data-redis</url>
  </organization>
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.Apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>costin</id>
      <name>Costin Leau</name>
      <email>[email protected]</email>
      <properties>
        <Twitter>costinl</Twitter>
      </properties>
    </developer>
    <developer>
      <id>jencompgeek</id>
      <name>Jennifer Hickey</name>
      <properties>
        <Twitter>jencompgeek</Twitter>
      </properties>
    </developer>
    <developer>
      <id>christophstrobl</id>
      <name>Christoph Strobl</name>
      <properties>
        <Twitter>stroblchristoph</Twitter>
      </properties>
    </developer>
    <developer>
      <id>thomasdarimont</id>
      <name>Thomas Darimont</name>
      <properties>
        <Twitter>thomasdarimont</Twitter>
      </properties>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:git://github.com/spring-projects/spring-data-redis</connection>
    <developerConnection>scm:git:git://github.com/spring-projects/spring-data-redis</developerConnection>
    <url>http://github.com/spring-projects/spring-data-redis</url>
  </scm>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.8.8</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.jredis</groupId>
      <artifactId>jredis-core-ri</artifactId>
      <version>06052013</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.6.2</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.0.9.RELEASE</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>commons-logging</artifactId>
          <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils-core</artifactId>
      <version>1.8.3</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.Apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.2</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.github.spullara.redis</groupId>
      <artifactId>client</artifactId>
      <version>0.7</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.10</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.lambdaworks</groupId>
      <artifactId>lettuce</artifactId>
      <version>2.3.3</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.jredis</groupId>
      <artifactId>jredis-core-api</artifactId>
      <version>06052013</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.5.1</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>
1
ceylog

Navin Viswanath、解決策をありがとう!ドキュメントやデバッグを使用して、どのようにしてそれを見つけましたか?

Gradleを使用している人のために、ここに私の組み合わせがあります:

バージョン

  • Redis 3.0.2
  • ジェダイ2.7.2
  • Spring Data Redis 1.6.0 M1(マイルストーンリリースであるため、Maven Centralでは使用できません-追加 http://repo.spring.io/milestone/ repo)

build.gradle

repositories {
  mavenCentral()
  maven { url 'http://repo.spring.io/release/' }
  maven { url 'http://repo.spring.io/milestone/' }
}

dependencies {
  compile group: 'redis.clients', name: 'jedis', version: '2.7.2'
  compile group: 'org.springframework.data', name: 'spring-data-redis', version: '1.6.0.M1'
}

Spring Data Redis 1.6.0.M1はリリースされると削除されることに注意してください。リリースとして利用可能になったら、1.6.0.RELEASEに変更する必要があります。

そこで、ここでバージョンの互換性を確認しました: https://github.com/spring-projects/spring-data-redis/blob/master/gradle.properties そして関連するJIRAチケットをここで見つけました:- https://jira.spring.io/browse/DATAREDIS-396

1
Danail

spring-boot-starter-data-redis2.0.4でも同様の問題がありました

アプリのpom.xmlにjedisへの依存関係を暗黙的に配置すると、どういうわけか機能しました

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

Eclipseは「管理対象バージョンの複製」について文句を言いますが、それ以外はすべて機能します

1
Maggnetix

互換性のあるバージョン:

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

以下のリンクから、jedismavenバージョンと互換性のあるSpringDataMavenバージョンを見つけることができます: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis/1.5.9。リリース

enter image description here

0
yaghob abbasi

Spring-boot-starter-data-redisを使用している場合

恒久的な修正は次のように入力できます。

  1. Spring-boot-starter-data-redisのバージョンを確認します。 Eclipseでは、pom.xmlファイルの依存関係エントリにマウスを合わせることができます。使用しているバージョンが表示されます。
  2. Mavenリポジトリ内のそのバージョンディレクトリに移動します。
  3. Pomファイルを編集し、必要なredisクライアントのバージョン番号を追加します。この場合、バージョン2.6.2.RELEASEは、spring-boot-starter-data-redisのバージョン1.50に対応します。この場合、<version>2.6.2.RELEASE</versionを追加する必要がありました。
  4. IDEで、プロジェクト全体を更新します。 EclipseまたはSTSでこれを行うには、プロジェクト名を1回クリックし、右クリックしてMavenを選択し、プロジェクトを更新します。
  5. Mavenの依存関係リストを確認すると、jedisのバージョンは2.6.2になっているはずです。
  6. プロジェクトをコンパイルします。
  7. Jarまたは7-Zipなどで.warアーカイブを開きます。WEB-INFの下のlibディレクトリを見つけて、jedis-2.6.2の存在を確認します。

これで問題は解決するはずです。

0
Reenactor Rob