2012-06-12 73 views
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的集成需求和自定義執行,以便它只能運行我的任務將其送入集成豆明確提及。之後,我提供了一個長時間運行的任務。我的EAR運行在WebLogic上,我傾倒了正在運行的線程堆棧,並且非常失望地發現,我的自定義執行程序中的大部分線程都在等待執行程序隊列中的某個對象從池中可用。我不希望CommonsPoolTargetSource將我的執行程序用作管理其源的平臺。我能在這裏做什麼?也許用CommonsTargetSource bean創建一個單獨的spring文件將解決它?謝謝你的任何想法。

+0

我不確定這是否是因素,但需要記住的一件事是,當您分配線程池(我假設ThreadPoolExecutor支持調度程序)時,它會將作業添加到隊列中,使用核心線程。至少這對我來說完全是違反直覺的。 – Gray

+0

格雷的評論似乎對目標是正確的。該命令基本上是:1)使用核心線程2)如果沒有足夠的核心線程,添加到隊列中,3)如果隊列已達到容量,則通過添加新線程來增大池(最大值)...那些添加的線程可能會超時並根據空閒時間設置再次被刪除。 – mfisher

回答

0

謝謝你們。發現池不是問題,我只需要添加更多實例並稍微增加池大小,隊列容量設置爲零,拒絕策略設置爲在調用者線程中執行調用。我還沒有在重負載下測試它。