2015-05-26 11 views
6

Sto tentando di pubblicare un messaggio su un canale utilizzando i dati Spring Redis con Jedis. Ecco una semplice configurazione di Java:Impossibile ottenere il collegamento per redisTemplate per i dati di primavera redis

@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; 
} 

dove redisPort = 6379 e redisHostName = "localhost".

Quando eseguo il seguente test:

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

ottengo il seguente stacktrace:

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 

risposta

5

Risulta usavo Jedi 2.7.2 ma la primavera dati Redis 1.5.0 sembra essere compatibile con Jedis 2.6.2. Vorrei che questo fosse un po 'più chiaro nella documentazione in qualche modo.

+0

Uguale per dati di primavera redis 1.4.4-RELEASE. C'è una dipendenza gestita someware (non riesco a trovare da dove ... grrrrr) il recupero di Jedis 2.5.2 – lrkwz

+0

So che questo è un thread vecchio, ma ho avuto questo problema e ho una soluzione. –

1

versione, ho incontrato lo stesso problema, questa primavera-dati-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

versione compatibile:

<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> 
10

Questo problema è causato dalla versione Jedi (2.7. 2) non compatibile con Spring Data Redis (1.5.0.RELEASE). Ho usato 3 giorni affrontando lo stesso problema prima di essere ispirato da questo post e commentare. La versione di Jedis (2.6.2) funziona correttamente (anche se ho riscontrato altri errori nel mio programma, ma almeno ha qualche progresso rispetto allo stesso messaggio di errore)!

Grazie.

+1

Felice di averlo aiutato. Suppongo che dobbiamo prestare attenzione al POM per assicurarci che le versioni siano compatibili, dal momento che lo stacktrace di solito non è utile quando ti imbatti in questi problemi. –

+0

Hai salvato la mia giornata @kwky. A proposito, sono davvero confuso, la primavera sta sopprimendo l'eccezione in un modo davvero pessimo. Hanno davvero bisogno di migliorare il loro codice per JedisConnectionFactory. – dosdebug

+1

Sì. Questo è il motivo per cui ho usato così tanto tempo per risolvere il mio problema. A proposito, possiamo sempre fare attenzione con le dipendenze compilate elencate in Maven per alcuni jar. Penso che sia consigliabile utilizzare la stessa versione di quella elencata, per evitare che il problema si ripresenti. – kwky

1

Navin Viswanath, grazie per la soluzione! Come l'hai trovato, usando i documenti o il debug?

Per coloro che utilizzano Gradle, qui è la mia combinazione:

Versioni:

  • Redis 3.0.2
  • Jedi 2.7.2
  • primavera dati Redis 1.6.0 M1 (non disponibile in Maven centrale, perché è una pietra miliare - aggiungere 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' 
} 

Si prega di notare che la primavera dati Redis 1.6.0.M1 verrà rimosso una volta che diventa liberazione, è necessario cambiarlo in 1.6.0.RELEASE quando è disponibile come release.

Così, ho controllato per la versione di compatibilità qui: https://github.com/spring-projects/spring-data-redis/blob/master/gradle.properties e ho trovato biglietto JIRA correlato qui: https://jira.spring.io/browse/DATAREDIS-396

0

Per coloro che utilizzano Primavera-boot-starter-dati-Redis

una correzione permanente può essere immesso come segue :

  1. Determinare la versione di spring-boot-starter-data-redis.In eclipse, puoi passare il mouse sopra la voce delle dipendenze nel tuo file pom.xml . Ti dirà la versione che stai utilizzando.
  2. Passare alla directory della versione nel repository di Maven.
  3. Modificare il file pom e aggiungere il numero di versione del client redis necessario. In questo caso versione 2.6.2.RELEASE per andare con la versione 1.50 di spring-boot-starter-data-redis. In questo caso ho dovuto aggiungere <version>2.6.2.RELEASE</version.
  4. Nel tuo IDE, aggiorna l'intero progetto. Per fare ciò in eclipse o STS, fai clic una volta sul nome del progetto-> fai clic con il tasto destro del mouse seleziona maven-> Aggiorna progetto
  5. Controlla l'elenco delle dipendenze di esperti e la versione di jedis ora dovrebbe essere 2.6.2.
  6. Compila il tuo progetto.
  7. Aprire l'archivio .war con jar o 7-zip ecc. Trovare la directory lib sotto WEB-INF e verificare la presenza di jedis-2.6.2.

Questo dovrebbe risolvere il problema.

0

Ho anche affrontato un problema simile. Ho fatto delle ricerche e ho scoperto che è dovuto a un conflitto di vasi.

versione compatibile sto usando nella mia applicazione è:

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

Oppure, se si utilizza avvio primavera semplicemente aggiungere il seguente dipendenza. L'avvio a molla è abbastanza intelligente da risolvere automaticamente tali problemi.

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

Spero che sia d'aiuto !!

Problemi correlati