0

redis を使用した Java アプリがあり、例外がスローされます。

ここにクラスがあります。メインクラス:

public class App {
    public static void main( String[] args ) {
        ManipulatingData manData = new ManipulatingData();
        manData.addData();
    }
}

アプリケーション構成:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.springredisdatabook;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    @Configuration
    public class ApplicationConfig {
        @Bean
        public JedisConnectionFactory connectionFactory() {
            JedisConnectionFactory connectionFactory = new JedisConnectionFactory(); 
            connectionFactory.setHostName("localhost"); 
            connectionFactory.setPort(6379);
            return connectionFactory;
        }
        @Bean 
        public StringRedisTemplate redisTemplate() {
            StringRedisTemplate redisTemplate = new StringRedisTemplate(); 
            redisTemplate.setConnectionFactory(connectionFactory()); 
            return redisTemplate;    
        }
        @Bean
        public RedisTemplate<String, Long> longTemplate() {
            StringRedisSerializer STRING_SERIALIZER = new StringRedisSerializer();
            RedisTemplate<String, Long> redisTemplate = new RedisTemplate<String, Long>();
                redisTemplate.setConnectionFactory(connectionFactory());
                redisTemplate.setKeySerializer(STRING_SERIALIZER);
                redisTemplate.setValueSerializer(LongSerializer.INSTANCE);
            return redisTemplate;
        }
    }

データの操作:

package com.mycompany.springredisdatabook;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

public class ManipulatingData {

    public ManipulatingData() {}

    @Autowired
    StringRedisTemplate redisTemplate;
    public void addData() {
        double start = System.currentTimeMillis(); 
        for (int i=1; i<=1000; i++) {
            redisTemplate.opsForSet().add("k" + i, "v" + i);
        }
        double end = System.currentTimeMillis();
        System.out.println("Add data time: " + (end-start));
    }
    public String getData (String key) {
        return redisTemplate.opsForValue().get(key);
    }
    public void deleteData(String key) {
        redisTemplate.opsForValue().getOperations().delete(key);
    }
}

例外:

Exception in thread "main" java.lang.NullPointerException
    at com.mycompany.springredisdatabook.ManipulatingData.addData(ManipulatingData.java:25)
    at com.mycompany.springredisdatabook.App.main(App.java:11)
Java Result: 1

それで、それは何ですか?何も思いつきません。ちなみに私はスプリングを使っています。

4

1 に答える 1

0

あなたのredisTemplateインスタンスはnullです。spring.xml の構成とredisTemplate、それが null になる可能性を確認してください。

于 2013-02-06T06:38:39.557 に答える