2017-12-17 8 views
1

春の起動時にRedisTemplateを使いたいです。私は正常にStringRedisTemplateを使用することができますが、私はRedisTemplateを使用することはできません。ここにコードがあります。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()); 
    } 
} 

次に、試験方法の実行:

2017年12月17日16:12:12.079 ERROR 4708 --- [メイン] OS testObjectを()、ここで、エラー報告でありますtest.context.TestContextManager:キャッチ例外 がTestExecutionListener [org.springframework.boot.test.a[email protected]49070868]

が[ [email protected]】テスト・インスタンスを準備することを可能にしながら210

org.springframework.beans.factory.UnsatisfiedDependencyException: 'springworld.RedisEntityTests'という名前のBeanを作成中にエラーが発生しました: フィールド 'redisTemplate'で表される満足しない依存関係。タイプ の無修飾ビーン「org.springframework.data.redis.core.RedisTemplate」入手可能:期待autowire候補としての資格少なくとも1つの豆 ネスト例外は org.springframework.beans.factory.NoSuchBeanDefinitionExceptionあります。依存関係の注釈: 〜 でorg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) {org.springframework.beans.factory.annotation.Autowired(必要=真)@} [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 〜[spring-beans-4.3。 13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) 〜[spring-beans-4.3.13.RELEASE.jar:4.3 .13.RELEASE] at org.springframework.beans.factory.suppo org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanPropertiesで(AbstractAutowireCapableBeanFactory:rt.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 〜[4.3.13.RELEASE春豆-4.3.13.RELEASE.jar] .java:386) 〜[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] でorg.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) 〜 [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 〜[spring-test-4.3。 13.RELEASE.jar:4.3.13.RELEASE](SpringBootDependencyInjectionTestExecutionListener.java:44) 〜[spring-boot-test-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org。 springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) 〜[spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner .createTest(SpringJUnit4ClassRunner.java:228)[spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] にあるorg.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) ) [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.junit.internal.runners.model.Re flectiveCallable.run(ReflectiveCallable。java:12) [junit-4.12.jar:4.12] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) [spring-test-4.3.13.RELEASE.jar: 4.3.13.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) の[spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.junit.runners.ParentRunner $ 3 .run(ParentRunner.java:290) [junit-4.12.jar:4.12] at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] at org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) [JUnitの-4.12.jar:4.12] org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268) [JUnitの-4.12.jar:4.12]で ORGで。 springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE]、 、org.springframework.test.context。 junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.junit.runners.ParentRunner.run(ParentRunner.java:363) [JUnitの-4.12.jar:4.12] org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)で [spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) [.cp /:na] ] at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp /:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:739) [.cp /:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761) [。 cp /:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461) [.cp /:na] org.eclipse.jdt.internal.junit.runner .RemoteTestRunner.main(RemoteTestRunner.java:207) [.CP /:NA]によって引き起こさ: org.springframework.beans.factory.NoSuchBeanDefinitionException:タイプ 「org.springframework.data.redis.coreなし 予選ビーン.RedisTemplate 'available:少なくとも1つのBean がautowire候補になります。依存注釈: {@ org.springframework.beans.factory.annotation.Autowired(=真必須)} でorg.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493) 〜[春-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 〜[spring-beans-4.3.13。 RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 〜[spring-beans-4.3.13.RELEASE.jar:4.3.13 .RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationB eanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) 〜[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] ...29の共通 フレームは、あなたがRedisTemplate.Youに注入するために使用するようになるBeanの設定ファイルを作成し、それを解決することができます定義されていない

答えて

1

を省略しました。

@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

あなたのコードが良いですが、私が欲しい本:RedisTemplate <文字列、ユーザー>、RedisTemplate <文字列は、Person>というように、だけでなく、RedisTemplate 。そのコードを再利用したい。とにかくありがとうございます。 –

+0

オブジェクトを使用してみてください。 –

+0

私はまだ混乱しています。それは春のブート1.5.9カンテJedisConnectionFactoryを注入するようです。私はこれがうまくいくのですか? ' @Bean RedisTemplate redisTemplate(RedisConnectionFactory factory){ ... template.setConnectionFactory(factory); ... } しかし、別の問題があります:ClassCastException、String cantがオブジェクトにキャストされる –

関連する問題