我想在 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/

10-09 02:52