问题标签 [apache-commons-pool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在方法之间传递绝地实例是一种不好的做法吗?
我指的是这个 SO question,我在这个基准测试中做了一些补充。主要问题是随着服务器负载的增加,我的 api 变得越来越慢。我正在使用绝地池配置。
在使用时,我在 try-with-resources 中获得 Jedis 实例并对其进行处理。我使用的流水线非常少,并且对 Redis 有各种调用,因此每次调用方法时,都会创建一个新的 jedis 实例。
根据共享的 SO 问题,我的实施将导致非常缓慢的结果。那么,我可以将 Jedis 实例传递给方法并按照业务逻辑使用管道。像这样的东西-
有什么方法可以改进 api 调用?您能否推荐一些在服务器端使用 jedis 的项目,以便我更好地了解如何有效地使用 jedis。
Redis / Jedis 配置
Jedis版本:2.8.1 Redis版本:2.8.4 Java版本:1.8
spring - 如果禁用 blockWhenExhausted,CommonsPool2TargetSource 会做什么?
已弃用的 CommonPoolTargetSource 具有一组可以使用setWhenExhaustedActionName()定义的行为。它包装的 CommonsPool2TargetSource 和 CommonsPool2 BaseGenericObjectPool将“getBlockWhenExhausted”描述为
返回当pool耗尽时调用borrowObject()方法时是否阻塞
我想了这么多!否则这有什么作用?
当您将 CommonsPool 设置为“WHEN_EXHAUSTED_GROW”时,池是否会扩展,还是只是抛出异常?怎么了?
java - Apache Commons Pool 1 -> 2:将挂起或不活动的连接对象召回到池中
目前我正在使用 Apache Commons Pool 1.6 来管理 GenericKeyedObjectPool 连接池。我已经看到线程既抛出异常又无限期挂起,这两者都导致借用的连接从池中泄漏。在使用 returnObject() 引发异常的情况下,我已经纠正了连接泄漏,但理想情况下,我希望池有某种方法来管理此问题并检索挂起或泄漏的连接。
根据我迄今为止的调查,Commons Pool 1.x 不提供此功能,Commons Pool 2.x 提供此功能,但到目前为止我无法找到它是如何完成的。
当使用 Apache Commons Pool 2 挂起或泄漏时,如何将借用的连接拉回池中?
谢谢
spring - Redis 客户端:当池大小耗尽时创建新连接
我们在我们的应用程序中使用 redis 进行缓存。
我们的目标是在池大小耗尽或超过某个阈值时创建新的 Redis 连接,以便我们可以将空闲连接的数量保持在最低限度。通过这种方式,redis-server 资源被分配给真正需要它的应用程序服务器。
在我们的 java 应用程序中,我们使用 spring-data-redis 1.4.2 的 spring 的 JedisConnectionFactory,它在内部使用 Jedis 2.6.2 和 commons-pool 2.0。
最新版本的 GenericObjectPool 没有动态增加池大小的选项。(早期版本的 commons-pool 有 whenExhaustAction 选项)
我也找不到在 Jedis 中传递自定义对象池的方法。
请建议我们如何实现这一目标。是否有任何其他 Redis-Client 对此提供支持?
java-8 - 如何验证池的 IBM MQ 连接
我正在使用 Apache 公共池(2.4.2)开发 IBM MQ 连接池。IBM MQ JAR 版本 8。
作为池概念的一部分,我需要在返回程序之前验证连接。
帮助我了解如何验证 IBM MQ 连接?
java - 验证 Apache Commons Pool 2 中的空闲对象的时间间隔是多少
我正在使用Apache Commons Pool 2
,我已经将配置设置testWhileIdle
为true,这意味着Pool框架将检查它们是否有效的空闲对象。
我会问是否定期进行此检查,如果是,默认间隔是多少,以及如何更改它。
我这样问是因为池中的对象应该定期连接到服务器以保持活动状态,我认为池的validateObject
方法是实现这一点的好地方。
根据@user7294900 的评论,有两个配置参数:
timeBetweenEvictionRunsMillis
, 默认值为 -1minEvictableIdleTimeMillis
, 默认值为 1800*60*30
我有以下两个问题:
- 这两个参数有什么区别?
- 我将它们都设置为5000,并且池中有8个对象,我在我的PooledObjectFactory的
validateObject
方法中打印了对象的哈希码,我发现只打印了3个对象的哈希码,然后再没有打印更多消息,看起来validateObject
不是每 5 秒调用一次,或者调用validateObject
被卡住了?
我发现问题了,请看评论
apache-commons-pool - 如何计算 Apache Common Pool 2 中空闲对象和借用对象的数量
BaseGenericObjectPool 类中定义了几个 getXXXCount 方法
BaseGenericObjectPool.getBorrowedCount
BaseGenericObjectPool.getCreatedCount
BaseGenericObjectPool.getDestroyedCount
但是所有这些都是从创建池开始计算的,即计数是累积的。
当用户要求这些计数时,我会问如何计算被借用对象和空闲对象的数量。
spring-boot - Spring 在原型 bean 上使用 @Scheduled 注释以及对象池
我目前有一个 spring bean,它有一个用 @Scheduled 注释的方法,以支持从外部源自动刷新其状态。我还用范围作为原型对 bean 进行了注释。现在,我正在尝试拥有一个这些 bean 池并将它们用于我的一项服务中。当应用程序启动时,我收到以下错误
我已经在我的其他服务中自动装配了 ModelManagerServicePool,并使用 getTarget() 和 releaseTarget API 来访问模型管理器对象。
我在 Spring 文档中读到,从 Spring 4.3.x 开始,非单例 bean 支持 @Scheduled,所以我怀疑我使用对象池的方式或 ModelManagerService 实例在对象池。任何建议都会非常有帮助。我尝试设置属性“spring.aop.proxy-target-class=true”,但没有帮助。
源代码:
java - 键控对象池未始终保持池中空闲对象的最小数量
我正在开发的一个应用程序使用Apache Commons 库来实现 KeyedObjectPools。
我们有一个对象工厂,其中我们实现了KeyedPoolObjectFactory接口中指定的方法。实现如下所示:
直到最近,默认配置才被用于构建键控对象池。现在,我已更改为使用修改后的配置,如下所示:
- TimeBetweenEvictionRunsMillis = 300000(设置为 5 分钟并启用空闲对象驱逐线程)
- MinIdlePerKey = 1(我需要在池中始终为每个键保留至少 1 个对象以满足我们的延迟要求)
- MinEvictableIdleTimeMillis = 300000(即,对象可以在池中保持空闲 5 分钟,之后它就有资格被驱逐)
(其他配置保持不变,即默认值)
现在,当我运行应用程序时,我看到驱逐线程正在运行,并且在对象保持空闲的 10 分钟内,destroyObject() 方法正在按预期调用。但是,我也注意到池没有为每个键维护至少 1 个空闲对象。
我的理解是,如果设置了 minIdlePerKey,有一种机制可以确保每个键的最小对象数可用。但这似乎并没有发生,我无法找出同样的原因。
关于为什么会发生这种情况的任何帮助或见解都会非常有用。
我看到的唯一警告是,我指的是文档 api-1.6 文档,同时使用 api-2.0 中的方法。我使用了 poolConfig.setMinIdlePerKey(myMinIdlePerKeyValue) ,它应该等同于 1.6 版本中的 poolConfig.setMinIdle() 。
scala - Apache Pool 2 库 - 连接不会自动关闭
pool2
我在使用 Apache库的 Scala 中有以下代码。要池化的对象是OlapConnection
(一个olap4j
类,类似于 SQL 连接)。
问题是当池对象的数量超过最大值时,我无法让池自动关闭连接。
如果我将一个对象返回到pool.returnObject
触发passivateObject
. 如果我在 中关闭连接passivateObject
,我会在每次返回对象时关闭它,这不是我想要的 - 我需要缓存打开的连接。如果我不关闭中的连接passivateObject
,那么它将永远不会关闭。
如何使这项工作?
斯卡拉代码: