Java 自定义对象池-保持连接活动的最佳方法

Java 自定义对象池-保持连接活动的最佳方法,java,jakarta-ee,connection-pooling,Java,Jakarta Ee,Connection Pooling,我需要重做对象的自定义连接池。连接池本质上是对象的ConcurrentLinkedQueue,每个对象对第三方服务器(Cognos)执行操作。池中的每个对象都包含一个令牌(String),用于向第三方服务器发送请求。第三方服务器将在不活动60分钟后使令牌过期。我需要防止令牌过期,因为从头开始创建与第三方服务器的连接可能需要几秒钟。我找到了一种防止令牌过期的方法,但我不知道如何将其合并到开源连接池解决方案(如C3PO或BoneCP)中。或者该“保持活动”逻辑是否应该在池外部执行,或者在每个对象本身

我需要重做对象的自定义连接池。连接池本质上是对象的
ConcurrentLinkedQueue
,每个对象对第三方服务器(Cognos)执行操作。池中的每个对象都包含一个令牌(
String
),用于向第三方服务器发送请求。第三方服务器将在不活动60分钟后使令牌过期。我需要防止令牌过期,因为从头开始创建与第三方服务器的连接可能需要几秒钟。我找到了一种防止令牌过期的方法,但我不知道如何将其合并到开源连接池解决方案(如C3PO或BoneCP)中。或者该“保持活动”逻辑是否应该在池外部执行,或者在每个对象本身内部执行


在每个连接对象中都有一个计时器来执行保持令牌活动的逻辑(比如每10分钟一次)有意义吗?

我认为有两种可能性:1。如前所述,将刷新逻辑添加到connection对象,并每10-20分钟发送一次通信量。使用您自己的池系统,并在一个单独的线程中“刷新”链接队列中的所有非活动连接。我希望对象能够作为正常处理的一部分重新初始化令牌,以防计时器关闭前第三方服务器发生问题。如果我将刷新逻辑添加到连接对象本身,我将如何处理通过计时器重新初始化令牌的对象,以及作为正常处理的一部分重新初始化令牌的对象?我会在更新令牌的方法上加上“synchronized”吗?是的,该方法上的synchronized将阻止它并发执行。当然,您还必须确保它不会与正常请求交互。您应该有一个标志,指示此连接上的正常请求当前是否处于活动状态(然后您可以忽略刷新请求)