1

我目前正在从事一个涉及许多独立运行的异步任务的项目。我有一个弹簧配置文件。

<task:executor id="taskScheduler" pool-size="5-20">
<task:executor id="specificTaskScheduler" pool-size="5-50" queue-capacity="100">

<!-- integration beans and 
     several object pools, with a total number of 100 beans created 
     using CommonsPoolTargetSource -->

我专门创建了两个执行器 - 一个用于 Spring 集成需求和自定义执行器,以便它仅运行我的任务,将其提供给具有显式引用的集成 bean。之后,我提供了一个需要处理的长时间运行的任务。我的 EAR 在 WebLogic 上运行,我转储了正在运行的线程的堆栈跟踪,并且非常失望地发现我的自定义执行程序中的 50 个线程中的大多数都在执行程序的队列中等待对象从池中可用。我不希望 CommonsPoolTargetSource 将我的执行程序用作管理其来源的平台。我可以在这里做什么?也许用 CommonsTargetSource bean 创建一个单独的 spring 文件可以解决它?谢谢你的任何想法。

4

1 回答 1

0

多谢你们。结果证明池不是问题,我只需要向它添加更多实例并稍微增加池大小,队列容量设置为零,拒绝策略设置为在调用者线程中执行调用。不过,我还没有在重负载下对其进行测试。

于 2012-06-13T08:43:18.610 回答