2017-08-15 373 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

不,我實際上是新的春天,所以我不知道如何寫這個測試。 –