REDIS (15) JedisPool的参数testoncreate,testWhileIdle,testonborrow和testonreturn
来源:互联网 发布:淘宝店铺推广流程 编辑:程序博客网 时间:2024/06/07 07:02
流程
【testonreturn参数】 JedisPool.returnResource(jedis)->pool.returnObject(jedis)->pool.getTestOnReturn() | | | | 【testOnborrow参数】 JedisPool.getResource()->pool.borrowObject() | | | \ | \ | \ | _\| \|/ PooledObjectFactory.validateObject(PooledObject<T>) | |--->JedisFactory.validateObject(PooledObject<Jedis>)-->ping通,不通销毁 | |-->ShardedJedisFactory.validateObject(ooledObject<Jedis>)->集群所有节点ping通,不通销毁
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(long borrowMaxWaitMillis) throws Exception
public T borrowObject(long borrowMaxWaitMillis) throws Exception { assertOpen(); AbandonedConfig ac = this.abandonedConfig; if (ac != null && ac.getRemoveAbandonedOnBorrow() && (getNumIdle() < 2) && (getNumActive() > getMaxTotal() - 3) ) { removeAbandoned(ac); } PooledObject<T> p = null; // Get local copy of current config so it is consistent for entire // method execution boolean blockWhenExhausted = getBlockWhenExhausted(); boolean create; long waitTime = System.currentTimeMillis(); while (p == null) { create = false; if (blockWhenExhausted) { p = idleObjects.pollFirst(); if (p == null) { p = create(); if (p != null) { create = true; } } if (p == null) { if (borrowMaxWaitMillis < 0) { p = idleObjects.takeFirst(); } else { p = idleObjects.pollFirst(borrowMaxWaitMillis, TimeUnit.MILLISECONDS); } } if (p == null) { throw new NoSuchElementException( "Timeout waiting for idle object"); } if (!p.allocate()) { p = null; } } else { p = idleObjects.pollFirst(); if (p == null) { p = create(); if (p != null) { create = true; } } if (p == null) { throw new NoSuchElementException("Pool exhausted"); } if (!p.allocate()) { p = null; } } if (p != null) { try { factory.activateObject(p); } catch (Exception e) { try { destroy(p); } catch (Exception e1) { // Ignore - activation failure is more important } p = null; if (create) { NoSuchElementException nsee = new NoSuchElementException( "Unable to activate object"); nsee.initCause(e); throw nsee; } } if (p != null && (getTestOnBorrow() || create && getTestOnCreate())) { boolean validate = false; Throwable validationThrowable = null; try { validate = factory.validateObject(p); } catch (Throwable t) { PoolUtils.checkRethrow(t); validationThrowable = t; } if (!validate) { try { destroy(p); destroyedByBorrowValidationCount.incrementAndGet(); } catch (Exception e) { // Ignore - validation failure is more important } p = null; if (create) { NoSuchElementException nsee = new NoSuchElementException( "Unable to validate object"); nsee.initCause(validationThrowable); throw nsee; } } } } } updateStatsBorrow(p, System.currentTimeMillis() - waitTime); return p.getObject(); }
···
阅读全文
0 0
- REDIS (15) JedisPool的参数testoncreate,testWhileIdle,testonborrow和testonreturn
- 关于连接池参数testWhileIdle,testOnBorrow,testOnReturn的疑问
- redis配置jedisPool参数
- JedisPool的配置参数
- redis之如何配置jedisPool参数
- redis之如何配置jedisPool参数
- redis之如何配置jedisPool参数
- redis之如何配置jedisPool参数
- redis之如何配置jedisPool参数
- redis之如何配置jedisPool参数
- JedisPool的配置参数详解
- Redis工具类,使用JedisPool,并设置jedis连接池的参数
- redis之如何配置jedisPool参数 jedis连接池参数
- jedisPool中的jedis实例被还回后是否会断开和redis服务端的socket连接
- Redis系列-JAVA与redis整合-JedisPool的使用
- redis-Jedispool学习
- SSM(Spring + Spring MVC +Mybatis)的Redis缓存,JedisPool配置
- JedisPool配置参数解析
- web项目调用arcgis api for JS离线包报“https://[HOSTNAME_AND_PATH_TO_JSAPI]dojo/...”错误解决方法
- 我们与五位大咖聊了聊,创业“独角兽”应具备的气质?
- “技术男”如何创业,他总结了一套避坑指南
- 管理员身份启动VS
- IOS NSThread和NSOperation基本使用
- REDIS (15) JedisPool的参数testoncreate,testWhileIdle,testonborrow和testonreturn
- 242. Valid Anagram
- python 参数详解
- 简述JVM基础(六):虚拟机字节码执行引擎
- 天池历届大赛答辩PPT及视频
- lab1
- 深入理解java虚拟机 摘要(一)
- lombok的简单粗暴的作用
- linux/windows系统设置ip、网关、加路由