1

我正在使用 apache commons pool2 配置对象池。似乎只有在尝试借用对象时才会创建池中的对象。我希望预先创建对象,因此当需要借用第一个对象时,我准备好了最少数量的对象。

我的弹簧配置看起来像这样:

<bean id="webSocketConnectionPool" class="org.apache.commons.pool2.impl.GenericObjectPool">
    <constructor-arg ref="webSocketConnectionFactory"/>
    <constructor-arg ref="webSocketConnectionPoolConfig"/>
</bean>

<bean id="webSocketConnectionFactory" class="com.blah.WebSocketConnectionFactory" />    

<bean id="webSocketConnectionPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
    <property name="maxIdle" value="300"/>
    <property name="maxTotal" value="1000"/>
    <property name="minIdle" value="10"/>
</bean>

我可以看到在应用程序启动时创建了池,但 minIdle 设置似乎并没有导致我想要的行为。工厂上的 create() 方法仅在借用第一个对象时调用。

任何提示将不胜感激。

谢谢

4

1 回答 1

0

我的解决方案是以连接池为成员的类的init方法添加一些逻辑,以添加对象。希望这将有助于将来的其他人。

connectionPool.addObjects(connectionPool.getMinIdle());
于 2020-06-23T09:47:19.353 回答