spring-data-redis用配置类连接时,抛异常Cannot get Jedis connection; nested exception is java.lang.NullPointerEx
来源:互联网 发布:淘宝搜索宝贝显示地址 编辑:程序博客网 时间:2024/05/01 10:14
前提:redis服务器已经运行,且端口号,服务器地址都已经配置正常,但任然抛出无法获取连接异常
原来的代码如下:
@Bean public JedisConnectionFactory connectionFactory(){ JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setUsePool(true); jedisConnectionFactory.setPoolConfig(jedisPoolConfig()); jedisConnectionFactory.setHostName(environment.getProperty("redis.host")); jedisConnectionFactory.setPort(Integer.parseInt(environment.getProperty("redis.port"))); return jedisConnectionFactory; }
其他配置都很正常,但是运行后会抛出空指针异常。
Request processing failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is java.lang.NullPointerException
解决方法如下,在return前添加如下代码
jedisConnectionFactory.afterPropertiesSet();看源码便知原因:看jedis如何获取到连接的:
public JedisConnection getConnection() {Jedis jedis = fetchJedisConnector();JedisConnection connection = (usePool ? new JedisConnection(jedis, pool, dbIndex) : new JedisConnection(jedis,null, dbIndex));connection.setConvertPipelineAndTxResults(convertPipelineAndTxResults);return postProcessConnection(connection);}我们看fetchJedisConnector()方法:
protected Jedis fetchJedisConnector() {try {if (usePool && pool != null) {return pool.getResource();}Jedis jedis = new Jedis(getShardInfo());// force initialization (see Jedis issue #82)jedis.connect();return jedis;} catch (Exception ex) {throw new RedisConnectionFailureException("Cannot get Jedis connection", ex);}}
如果没用用pool的话,需要用到getShardInfo()方法,而这个方法就是返回一个JedisShardInfo shardInfo。那么这个JedisShardInfo shardInfo在什么时候初始化呢?查看后发现,哈哈在这:
public void afterPropertiesSet() {if (shardInfo == null) {shardInfo = new JedisShardInfo(hostName, port);if (StringUtils.hasLength(password)) {shardInfo.setPassword(password);}if (timeout > 0) {setTimeoutOn(shardInfo, timeout);}}if (usePool) {this.pool = createPool();}}
这个方法将在所有的属性被初始化后调用。但是会在init前调用。是spring中InitializingBean接口的方法。spring-data-redis里面实现了它。在这里对shardIndo类进行了初始化。所以,我们只要在代码中添加:
jedisConnectionFactory.afterPropertiesSet();这句就可以啦。再运行一次,连接成功!
0 0
- spring-data-redis用配置类连接时,抛异常Cannot get Jedis connection; nested exception is java.lang.NullPointerEx
- spring-data-redis用配置类连接时,抛异常Cannot get Jedis connection; nested exception is java.lang.NullPointerE
- Cannot get Jedis connection; nested exception is java.lang.NullPointerException
- HTTP Status 500 - Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.Je
- HTTP Status 500 - Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.J
- Spring 集成Redis遇到问题nested exception is java.lang.ClassNotFoundException: redis.clients.jedis.JedisPoo
- Unknown jedis exception; nested exception is java.lang.NullPointerException
- nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map ***
- nested exception is java.lang.IllegalStat eException:duplicate spring bean
- nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
- nested exception is java.lang.ClassCastException: java.lang.IllegalArgumentException cannot be cast
- HTTP Status 500 - Could not open JDBC Connection for transaction; nested exception is java.lang.NoCl
- nested exception is java.lang.NoClassDefFoundError
- nested exception is java.lang.NoSuchFieldError: TRACE
- nested exception is java.lang.NoSuchFieldError: QUALIFIED
- nested exception is java.lang.IllegalArgumentException
- EncodingFilter Could not get JDBC Connection; nested exception is java.sql
- Mariadb Could not get JDBC Connection; nested exception is java.sql.SQLException
- HDU-1827-Summer Holiday(强连通分量)
- [数据结构]Linked_queue
- 查看apk签名 和 keystore 的信息
- spring中MessageSource的配置使用方法2--ReloadableResourceBundleMessageSource
- lucene index 锁
- spring-data-redis用配置类连接时,抛异常Cannot get Jedis connection; nested exception is java.lang.NullPointerEx
- 74.深拷贝和完全拷贝对比的探究
- 回文字符串
- 关于Quaternion
- PopUpWindow显示在某个View之上,同时使用动画
- 前端工作总结
- 实现三列布局
- c++实验2
- Visual Studio 2013安装提示"此版本的Visual Studio需要安装了更新版本的windows的计算机"解决