我想在spring boot中使用RedisTemplate . 我可以成功使用StringRedisTemplate,但我不能使用RedisTemplate . 这是代码 .
@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());
}
}
然后,运行测试方法:testObject(),这是错误报告:
2017-12-17 16:12:12.079 ERROR 4708 --- [main] ostest.context.TestContextManager:允许TestExecutionListener [org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@49070868]准备测试实例时捕获异常[springworld.RedisEntityTests@2f3cd727] org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'springworld.RedisEntityTests'的bean时出错:通过字段'redisTemplate'表示不满意的依赖关系;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型'org.springframework.data.redis.core.RedisTemplate'的限定bean可用:预计至少有1个bean可以作为autowire候选者 . 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)〜[spring-beans -4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)〜[spring-beans-4.3.13.RELEASE.jar: 4.3.13.RELEASE] 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.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)〜[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory .autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:38 6)〜[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] at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)〜[spring-test-4.3.13.RELEASE.jar:4.3 . 13.RELEASE]在org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44)〜[spring-boot-test-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] at at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)〜[spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner .createTest(SpringJUnit4ClassRunner.java:228)[spring-test-4.3.13.RELEASE.ja r: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] at at org.junit.internal.runners.model.ReflectiveCallable.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]在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)[spring-test-4.3.13.RELEASE.jar:4.3.13.RELEASE] at 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(ParentRu) nner.java:288) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)[junit-4.12.jar:4.12] at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)[junit-4.12.jar:4.12] at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)[spring-test-4.3.13 .RELEASE.jar:4.3.13.RELEASE] atorg.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 . 在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)中运行(ParentRunner.java:363)[junit-4.12.jar:4.12] [spring-test-4.3.13.RELEASE.jar :4.3.13.RELEASE] org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)[ . ct /:na] at or.e.eclipse.jdt.internal.junit.runner . testOecution.run(TestExecution.java:38)[ . cc /:na] atg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:539)[ . cp /:na] at org . eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)[ . cp /:na] at or.e.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461) [.cp /:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207) [.cp /:na]引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型'org.springframework.data.redis.core.RedisTemplate'的限定bean可用:预计至少有1个bean有资格作为autowire候选者 . 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)〜[spring-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] org.springframework上的org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)〜[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] . beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)〜[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] ...省略了29个常用帧
2 回答
看起来没有简单的方法可以做到这一点 . 你的问题类似于DRYing up a generic RedisTemplate in Spring 4
序列化有一些技巧Spring RedisTemplate : Serialise multiple Model classes into JSON.Need to use Multiple RedisTemplates?
您还没有在RedisTemplate中定义要用于注入的Bean . 您可以解析它创建配置文件 .