Apache commons pools2 有一个 AbandonedConfig,如果借用对象没有在“removeAbandonedTimeout”定义的持续时间内返回,则有助于放弃借用对象。
例子 :
AbandonedConfig abandonedConfig = new AbandonedConfig();
abandonedConfig.setRemoveAbandonedTimeout(evictAbandonedTime); // in seconds
abandonedConfig.setRemoveAbandonedOnBorrow(true); // on borrow, test when pool is starving
abandonedConfig.setRemoveAbandonedOnMaintenance(true); // and test pool when evicting
pool.setAbandonedConfig(abandonedConfig);
但是,AbandonedConfig 仅适用于 GenericObjectPool 而不是 GenericKeyedObjectPoolConfig。
在 commons pool2 中实现此目的的唯一方法(可能是粗略的方法)是,在 GenericKeyedObjectPool 的单个键下使用多个 GenericObjectPool 实例(其池中只有一个对象),并使用 AbandonedConfig 设置 GenericObjectPool。
我讨厌这个解决方案的地方是两次借用,但从好的方面来说,第二次借用永远不会花费时间。