2017-12-17 4 views
1

Autowire Ich möchte RedisTemplate im Spring Boot verwenden. Ich kann StringRedisTemplate erfolgreich verwenden, aber ich kann RedisTemplate nicht verwenden. Hier ist der Code.Gewusst wie: RedisTemplate <String, Object>

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class RedisEntityTests { 

    @Autowired 
    private StringRedisTemplate stringRedisTemplate; 

    @Autowired 
    private RedisTemplate<String, RedisEntity> redisTemplate; 

    // This test case can run successfully. 
    @Test 
    public void testString() { 
     // save string 
     stringRedisTemplate.opsForValue().set("aaa", "111"); 
     Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa")); 
    } 

    // This test case I got error. 
    @Test 
    public void testObject() throws Exception { 
     // save object 
     RedisEntity redisEntity = new RedisEntity("Tom", 20); 
     redisTemplate.opsForValue().set(redisEntity.getName(), redisEntity); 

     Assert.assertEquals(20, (redisTemplate.opsForValue().get("Tom")).getAge().longValue()); 
    } 
} 

Dann wird das Testverfahren aus: testobject(), Hier ist der Fehlerbericht:

2017-12-17 16: 12: 12,079 ERROR 4708 --- [Main] os test.context.TestContextManager: abgefangene Ausnahme während ermöglicht TestExecutionListener [org.springframework.boot.test.a[email protected]49070868] Testinstanz [[email protected]]

vorzubereiten 210

org.springframework.beans.factory.UnsatisfiedDependencyException: Fehler beim Erstellen einer Bean mit dem Namen 'springworld.RedisEntityTests': Unzufriedene Abhängigkeit ausgedrückt durch Feld 'redisisTemplate'; verschachtelte Ausnahme ist org.springframework.beans.factory.NoSuchBeanDefinitionException: Nein qualifizierenden Bohne vom Typ ‚org.springframework.data.redis.core.RedisTemplate‘ zur Verfügung: mindestens 1 Bohne erwartet, die als autowire Kandidat qualifiziert. Dependency Anmerkungen: {@ org.springframework.beans.factory.annotation.Autowired (required = true)} bei org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:588) ~ [spring-bohnen-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:88) ~ [spring-bohnen-4.3. 13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:366) ~ [spring-bohnen-4.3.13.RELEASE.jar: 4.3 .13.RELEASE] unter org.springframework.beans.factory.suppo rt.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1264) ~ [Feder-Bohnen-4.3.13.RELEASE.jar: 4.3.13.RELEASE] bei org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties (AbstractAutowireCapableBeanFactory .java: 386) ~ [spring-bohnen-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies (DependencyInjectionTestExecutionListener.java:118) ~ [feder-test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] um org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance (DependencyInjectionTestExecutionListener.java:83) ~ [Feder-Test-4.3. 13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance (SpringBootDependencyInjectionTestExecutionListener.java:44) ~ [feder-boot-test-autoconfigure-1.5.9.RELEASE.jar: 1.5.9.RELEASE] unter org. springframework.test.context.TestContextManager.prepareTestInstance (TestContextManager.java:230) ~ [federtest-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.test.context.junit4.SpringJUnit4ClassRunner .createTest (SpringJUnit4ClassRunner.java:228) [federtest-4.3.13.RELEASE.jar: 4.3.13.RELEASE] um org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall (SpringJUnit4ClassRunner.java:287) [feder-test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.junit.internal.runners.model.Re flectiveCallable.run (ReflectiveCallable.run).java: 12) [junit-4.12.jar: 4.12] um org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit4ClassRunner.java:289) [feder-test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:247) [Feder-Test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:94) [federtest-4.3.13.RELEASE.jar: 4.3.13.RELEASE] um org.junit.runners.ParentRunner $ 3 .run (ParentRunner.java:290) [junit-4.12.jar: 4.12] um org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) [junit-4.12.jar: 4.12] um org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) [junit-4.12.jar: 4.12] um org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) [junit-4.12.jar: 4.12] bei org.junit.runners.ParentRunner $ 2.Bewertung (ParentRunner.java:268) [junit-4.12.jar: 4.12] bei org. springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61) [federt 4.3.13.RELEASE.jar: 4.3.13.RELEASE] bei org.springframework.test.context. junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:70) [Feder-Test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.junit.runners.ParentRunner.run (ParentRunner.java:363) [junit-4.12.jar: 4.12] bei org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:191) [feder-test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] um org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:86) [.cp /: na ] um org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) [.cp /: na] um org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:539) [.cp /: na] um org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:761) [. cp /: na] um org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:461) [.cp /: na] um org.eclipse.jdt.internal.junit.runner .RemoteTestRunner.main (RemoteTestRunner.java:207) [.cp /: na] verursacht durch: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nein qualifizierenden Bohne vom Typ ‚org.springframework.data.redis.core .RedisTemplate 'verfügbar: erwartet mindestens 1 Bean , die sich als Autowire-Kandidat qualifiziert. Dependency Anmerkungen: {@ org.springframework.beans.factory.annotation.Autowired (required = true)} bei org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1493) ~ [Frühling -beans-4.3.13.RELEASE.jar: 4.3.13.RELEASE] unter org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1104) ~ [spring-bohnen-4.3.13. RELEASE.jar: 4.3.13.RELEASE] um org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1066) ~ [spring-bohnen-4.3.13.RELEASE.jar: 4.3.13 .RELEASE] unter org.springframework.beans.factory.annotation.AutowiredAnnotationB eanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:585) ~ [spring-bohnen-4.3.13.RELEASE.jar: 4.3.13.RELEASE] ...29 gemeinsame Rahmen weggelassen

Antwort

1

Sie haben die Bean definiert, die Sie für die Injektion in RedisTemplate.You verwenden möchten, können lösen sie eine Konfigurationsdatei zu erstellen.

@Bean 
    JedisConnectionFactory jedisConnectionFactory() { 
     return new JedisConnectionFactory(); 
    } 

    @Bean 
    RedisTemplate< String, Object > redisTemplate() { 
     final RedisTemplate< String, Object > template = new RedisTemplate< String, Object >(); 
     template.setConnectionFactory(jedisConnectionFactory()); 
     template.setKeySerializer(new StringRedisSerializer()); 
     template.setHashValueSerializer(new GenericToStringSerializer<Object>(Object.class)); 
     template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class)); 
     return template; 
    } 
+0

Ihr Code ist gut, aber ich möchte dies: RedisTemplate , RedisTemplate und so weiter, nicht nur RedisTemplate . Ich möchte diesen Code wiederverwenden. irgendwelche Vorschläge? Danke trotzdem. –

+0

Versuchen Sie es mit dem Objekt. –

+0

Verwirrt mich immer noch. und es scheint, dass der Spring Boot 1.5.9 JedisConnectionFactory so injizieren kann. Ich tue dies, wie es gerade ' @Bean RedisTemplate redisTemplate (RedisConnectionFactory Fabrik) { ... template.setConnectionFactory (Fabrik) arbeitet; ... } ' aber ich habe ein anderes Problem: ClassCastException, Zeichenfolge kann nicht in Objekt umgewandelt werden –

Verwandte Themen