当前位置: 首页 > 知识库问答 >
问题:

为什么redis抛出NullPointerException通过使用spring和默认配置的JUnit运行?

程磊
2023-03-14
redis-server

下面是我的测试:

@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)

共有1个答案

丁文轩
2023-03-14

问题是redisTemplate和jedisConnectionFactory都需要调用afterPropertiesSet()。通常这是由Spring配置调用的,但由于这对我不起作用,所以必须显式地调用它。

还有,这些线

 factory.setHostName("localhost")
 factory.setPort(6379)
 factory.setUsePool(true)

是不必要的,因为它们是默认值。

 类似资料:
  • 问题内容: 根据文档,该方法返回: 如果参数是,则字符串等于; 否则,返回的值。 但是,当我尝试这样做时,怎么会这样: 它会抛出NPE吗?(如果你不相信,请自己尝试!) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗? 问题答案: 问题是方法已重载: String.valueOf(Object) String.valueOf(char[]) Java规范语言要求在这种情况下,选择最具体的重

  • 问题内容: 以下代码抛出: 因为它是静态的,所以我的编译器是否调用null?那没有任何意义! 发生了什么? 问题答案: 这里有两个问题在起作用: 不按照你的想法去做 在这种情况下返回 从到的分配会导致自动取消装箱 由于是被抛出 要解析,你可以使用例如。

  • 问题内容: Selenium WebDriver(又名Selenium 2)在哪里打开FirefoxDriver时会使用匿名配置文件?如果它使用Firefox的默认值%appdata%/ roaming / mozilla / firefox / profiles,那么如果我要禁用firefox插件,那么也应该对Selenium WebDriver禁用它,为什么不是呢? 问题答案: 我将回答它,并

  • 我想了解为什么一段代码不会抛出NullPointerException。 请考虑以下代码: 方法被重复调用,同时以下代码在单独的线程中运行: 只有一个实例。 从不引发NullPointerException。 但是,当方法暂停时,即使暂停0毫秒,也会按预期引发NullPointerException: 我的理解是,在理论上,在检查和调用之间存在竞争条件。在实践中,如果不引入暂停(即从后续方法调用中

  • 我有一段类似这样的代码: 我的测试是: 上面的代码不应该抛出NPE吗? 当我将测试更改为: 然后我的代码正确地抛出了一个空指针异常。 我的测试第一版和第二版有什么区别? 在我的第一个版本中,我告诉mockA返回mockB。但是我也将mockB设置为null,所以当调用b.doSomething()时,我认为该方法应该抛出一个空指针,因为它试图调用null.doSomething()。 我知道我应该

  • 问题内容: 我的应用程序当前将Spring Session与Redis一起用作后端。 我搜索了Spring Session 的官方文档,但使用该模块时找不到默认的会话超时。 另外,我不确定如果需要如何更改默认超时。 有人可以请教吗? 问题答案: 使用Redis存储库时配置会话超时的最简单方法是 当存储库中不再有会话时,该会话将 过期 。可以同时在和上配置超时。默认值为 30分钟 。 如果您使用的是