我想在 Spring 启动时使用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(),这是错误报告:
最佳答案
您尚未在RedisTemplate中定义要用于注入(inject)的Bean。您可以通过创建配置文件来解决该问题。
@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;
}
关于java - 如何自动连接RedisTemplate <String,Object>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47853416/