- 27
- 0
最近在项目中(spring)集成 redis 时,在去工厂实例时,一直抱空指针 异常:
但是单元测试始终正常:
以下为 redis-config.xml 文件
<context:property-placeholder location="classpath:properties/redis.properties" ignore-unresolvable="true"/>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}"/>
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxWaitMillis" value="${redis.maxWait}"/>
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
</bean>
<!-- 单例模式 默认 -->
<bean id="connectionFactory" class="redis.clients.jedis.JedisPool">
<constructor-arg ref="jedisPoolConfig" name="poolConfig"/>
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port}"/>
<constructor-arg name="timeout" value="${redis.timeout}"/>
</bean>
测试代码:
@Test
public void redisTest(){
Jedis jedis=jedisConnectionFactory.getResource();
jedis.set("123","312312");
System.out.println(jedis.get("123"));
}
测试运行结果为:
312312
但是在 mybatis 中加入二级缓存抱错
xxxMapper.xml
```xml
<cache type="extra.cache.RedisCache"/>
```
二级缓存接口继承处理...
@Component
public class RedisCache implements Cache {
private static final Logger logger= LoggerFactory.getLogger(RedisCache.class);
@Autowired
private JedisPool jedisConnectionFactory;
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private final String id;
public RedisCache(final String id){
if(id==null){
throw new IllegalArgumentException("Cache instances require an ID");
}
logger.debug("MybatisRedisCache:id=" + id);
this.id=id;
}
/**
* 获取 id
* @return
*/
public String getId() {
return this.id;
}
/**
* 存储数据到 redis 数据库中
* @param key
* @param value
*/
public void putObject(Object key, Object value) {
logger.info("putObject :"+key+"= "+value);
Jedis connection= jedisConnectionFactory.getResource();
RedisSerializer<Object> serializer=new JdkSerializationRedisSerializer();
connection.set(serializer.serialize(key),serializer.serialize(value));
connection.close();
}
/**
* 从 redis 中获取 数据
* @param key
* @return
*/
public Object getObject(Object key) {
logger.info("jedisConnectionFactory : "+jedisConnectionFactory);
Jedis connection= jedisConnectionFactory.getResource();
RedisSerializer<Object> serializer=new JdkSerializationRedisSerializer();
Object result=serializer.deserialize(connection.get(serializer.serialize(key)));
connection.close();
return result;
}
报的错误如下:打印日志说明为 空对象(JedisPool)
INFO extra.cache.RedisCache - jedisConnectionFactory : null
Error querying database. Cause: java.lang.NullPointerException
### Cause: java.lang.NullPointerException
-
初步怀疑为spring 加载顺序的问题,但是采用 SpringContextUtil.getBean("") ,依旧获取不了 该实例
public class SpringContextUtil implements ApplicationContextAware{...} - 该项目采用多maven结构,同时子maven 打包时,存在一系列问题... 导致子模块之间没有通信
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
陈龄耀 普通会员 1楼
JedisPool 注入 Spring 为 null 通常是因为在 Spring 中配置了
@Bean注解,但 Spring 的BeanFactory没有找到这个注解的实例。如果你是在 JedisPool 的配置类中使用了
@Bean注解,你可以尝试以下几种解决方法:- 检查
@Bean注解的引用:确保你在@Bean注解的引用处没有错误,例如:
java @Bean public JedisPoolConfig jedisPoolConfig() { return new JedisPoolConfig(); }- 检查
BeanFactory的创建:如果你在使用 Spring 的BeanFactory,确保它已经被正确地创建。你可以通过以下代码来检查:
java if (BeanFactory.class.isAssignableFrom(JedisPoolConfig.class)) { // 创建 JedisPoolConfig 对象 JedisPoolConfig config = (JedisPoolConfig) BeanFactory.getBean(JedisPoolConfig.class); }- 检查
JedisPool的配置:如果你在使用 Spring 的JedisPool,确保它已经被正确地配置。你可以通过以下代码来检查:
java JedisPool pool = new JedisPool(config);- 检查 JedisPool 的连接池大小:如果你的 JedisPool 的连接池大小设置为
Integer.MAX_VALUE,你可以尝试增加连接池大小,例如:
java pool.setMaxTotal(100);希望这些方法可以帮助你解决 JedisPool 注入 Spring 为 null 的问题。
- 检查
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
