在(一)中说到此次实践FTP链接池内是通过GenericObjectPool做池子的,那么参数的话主要就针对它去做分析,GenericObjectPool是继承自BaseGenericObjectPool,所以有些参数是BaseGenericObjectPool内的,另外构造方法内默认给的是GenericObjectPoolConfig,有些在这其中,还有些在BaseObjectPoolConfig内。
1. GenericObjectPool内采用的是LinkedBlockingDeque这样一个双端队列做池,因此可以从头尾取数据。
默认为true【空闲链接放在队列最前面】false【放在队列最后面】
private volatile boolean lifo = BaseObjectPoolConfig.DEFAULT_LIFO;
2.是否采用公平锁机制。【BaseObjectPoolConfig】【ReentrantLock内的公平锁】
private boolean fairness = DEFAULT_FAIRNESS;
1. 池中最大链接数,默认是8。
private int maxTotal = DEFAULT_MAX_TOTAL;
2. 池中最大空闲链接数目,默认是8。
private int maxIdle = DEFAULT_MAX_IDLE;
3.池中最小空闲链接数目,默认为0。
private int minIdle = DEFAULT_MIN_IDLE;
1. 当链接池资源耗尽时,等待时间,超出抛异常,默认为-1,阻塞。
private long maxWaitMillis = DEFAULT_MAX_WAIT_MILLIS;
2. 【true】maxWaitMillis生效,【false】链接池没资源时,立马抛异常。
private boolean blockWhenExhausted = DEFAULT_BLOCK_WHEN_EXHAUSTED;
1. 默认是false,创建一个链接时检测是否链接有效,无效则剔除,并尝试继续获取新链接。
private boolean testOnCreate = DEFAULT_TEST_ON_CREATE;
2. 默认是false,借取一个链接时检测是否有效,无效则剔除,并尝试继续获取新链接。
private boolean testOnBorrow = DEFAULT_TEST_ON_BORROW;
3.默认为false,归还一个对象时检测是否有效,无效则不放入链接池内。
private boolean testOnReturn = DEFAULT_TEST_ON_RETURN;
4.默认为false,指明空闲链接是否需要被【空闲链接回收器】【evict方法】检测,检测出链接无效则被移除。
private boolean testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
1. 空闲链接回收器运行时检查的空闲链接数量,默认是3个。
private int numTestsPerEvictionRun = DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
2.空闲链接存活的最小时间,达到此值后空闲链接将被移除。默认1000L * 60L * 30L ,单位ms。
private volatile long minEvictableIdleTimeMillis = BaseObjectPoolConfig.DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
3.空闲链接回收器运行的周期,单位ms,默认-1,永不执行检测。
private volatile long timeBetweenEvictionRunsMillis = BaseObjectPoolConfig.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
4.空闲链接存活的最小时间,达到此值后被移除,且要保留minIlde个空闲链接,默认为-1。
private long softMinEvictableIdleTimeMillis = DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
5.空闲链接回收器的类名,默认org.apache.commons.pool2.impl.DefaultEvictionPolicy。
private String evictionPolicyClassName = DEFAULT_EVICTION_POLICY_CLASS_NAME;
6.移除链接时的超时时间,默认10L * 1000L。
private long evictorShutdownTimeoutMillis = DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT_MILLIS;
GenericObjectPool构造函数内还提供了一个配置,就是AbandonedConfig,清理策略,主要保证被借出的链接长时间没有归还导致链接被占用的链接泄漏问题。
1. 创建时是否对此链接跟踪堆栈,默认false。
private boolean logAbandoned = false;
2.采用out打印日志。
private PrintWriter logWriter = new PrintWriter(System.out);
3.在借取对象时开启清理策略,默认是false,打开影响性能。
private boolean removeAbandonedOnBorrow = false;
4.在空闲链接回收器【evict方法】内进行链接占用时间过长的清理。
private boolean removeAbandonedOnMaintenance = false;
5.借取的链接超过多长时间没有归还被认定为泄漏,默认5分钟。
private int removeAbandonedTimeout = 300;
common-pool2 (三)------ 链接池实现详解