我正在使用Java 7,Spring 3.2,jedis 2.1.0,spring-data-redis 1.1.1开发OS X,尝试使用默认的redis配置设置最简单的redis。意思是我没有在redis.conf文件中添加任何内容。当我做的时候
redis-server
它表示已启动并已准备好接受端口6379上的连接。
最初,我使用Annotated Beans为RedisTemplate和JedisConnectionFactory尝试了这个,但是春天抱怨它无法创建或找到那些bean,所以我这样做了。也许这表明了一个更基本的问题。所以我使用下面稍长的版本来做到这一点,但这至少可以创建Redis和Jedis组件。
这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class RedisTest {
@Configuration
static class ContextConfiguration {
}
RedisTemplate<String, String> template;
private JedisConnectionFactory getJedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName("localhost");
factory.setPort(6379);
factory.setUsePool(true);
return factory;
}
private RedisTemplate<String, String> getRedisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(getJedisConnectionFactory());
return redisTemplate;
}
@Test
public void testRedis() {
System.out.println("testing redis ");
template = getRedisTemplate();
template.opsForValue().set("Key", "Value");
String value = template.opsForValue().get("Key");
System.out.println("got value : " + value);
}
}
并且错误堆栈跟踪的顶部是
java.lang.NullPointerException
java.lang.NullPointerException
at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:110)
at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:166)
at com.mycompany.storage.RedisTest.testRedis(RedisTest.java:46)
答案 0 :(得分:9)
问题是redisTemplate和jedisConnectionFactory都需要调用afterPropertiesSet()。通常这是由Spring配置调用的,但由于这对我来说不起作用,因此必须明确调用它。
此外,这些行
factory.setHostName("localhost")
factory.setPort(6379)
factory.setUsePool(true)
是不必要的,因为它们是默认值。