2017-08-15 371 views
0

嗨我正在使用java-redis与jedis进行集成,并且在尝试设置项目时提出了此问题。我是春天新手,所以初始设置时可能会出现一些问题。这就是我想与之合作的代码:Redis模板上的Spring Redis空指针异常

RedisConfig.java

@Configuration 
public class RedisConfig { 

    @Bean 
    public RedisConnectionFactory jedisConnectionFactory() { 
    JedisPoolConfig poolConfig = new JedisPoolConfig(); 
    poolConfig.setMaxTotal(1000); 

    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig); 
    jedisConnectionFactory.setHostName(Properties.getInstance().getPropertyValueReader().getAWSRedisEndPoint()); 
    jedisConnectionFactory.setPort(6379); 
    return jedisConnectionFactory; 
    } 

    @Bean 
    public <K, V> RedisTemplate<String, V> getRedisTemplate() { 
    JdkSerializationRedisSerializer jackson2JsonRedisSerializer = new JdkSerializationRedisSerializer(); 
    RedisTemplate<String, V> redisTemplate = new RedisTemplate<String, V>(); 
    redisTemplate.setConnectionFactory(jedisConnectionFactory()); 
    redisTemplate.setKeySerializer(new StringRedisSerializer()); 
    redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 
    redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer); 
    redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); 
    redisTemplate.setHashKeySerializer(new StringRedisSerializer()); 
    return redisTemplate; 
    } 

} 

CacheRepository.java

public interface CacheRepository<T, V> { 
    V get(Object key); 

    void add(Object redisKey, Object key, T value); 

    void add(T key, V value); 

    void expire(Object key); 
} 

CacheRepositoryImpl.java

@Component 
public class CacheRepositoryImpl<T, V> implements CacheRepository<T, V> { 

    @Autowired 
    protected RedisTemplate<String, V> redisTemplate; 

    @Override 
    public V get(Object key) { 
    } 

    @Override 
    public void expire(Object key) { 
    } 

    @Override 
    public void add(Object redisKey, Object key, T value) { 
    } 

    @Override 
    public void add(T key, V value) { 
    } 
} 

VendorInformationCacheRepository.java

public class VendorInformationCacheRepository extends CacheRepositoryImpl<String, HashMap<String, List<Vehicles>>> { 

private static final String KEY = "Vendors"; 

@Override 
public void add(String key, HashMap<String, List<Vehicles>> value){ 
    System.out.println(redisTemplate);     // this prints null 
    redisTemplate.opsForHash().put(KEY, key, value); 
} 

}

BaseController.java

VendorInformationCacheRepository vicr = new VendorInformationCacheRepository(); 
vicr.add("testKey", myNewList); 

VendorInformationCacheRepository.javaredisTemplate.opsForHash().put(KEY, key, value);给空指针异常。 这是错误的堆栈跟踪:

java.lang.NullPointerException 

at com.moveinsync.cache.CacheRepositoryImpl.add(CacheRepositoryImpl.java:35) 
at com.moveinsync.controllers.BaseController.redisTest(BaseController.java:97) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
at java.lang.Thread.run(Thread.java:748) 

任何帮助将高度赞赏。提前致谢。在这条线上

System.out.println(redisTemplate); // this prints null

你有接线Redis的模板问题基于干杯

+0

其中代码是'BaseController.redisTest'? –

+0

@JacekCz作出了编辑的帖子 –

+0

马克VendorInformationCacheRepository为@Repository和地点,可用于包装扫描 – StanislavL

回答

0

找出我做错了什么。在我的基本控制器的我被初始化对象:

VendorInformationCacheRepository vicr = new VendorInformationCacheRepository(); 

这将导致失去bean.All我不得不做内完成所有自动装配在调用该方法的类作为类已经自动装配。

0

。我不认为你的泛型声明可以完成这个工作。取而代之的是,豆为RedisTemplate<String,Object>

@Bean 
    public RedisTemplate<String, Object> redisTemplate() { 
    ... 
    } 

开始用简单的集成测试,将确认您可以连线正确RestTemplate实例为您的存储库。

+0

这没有奏效 –

+0

如果bean注入配置有问题,您是否创建了测试来重现? –

+0

不,我实际上是新的春天,所以我不知道如何写这个测试。 –