我有奇怪的工作行爲,並不明白爲什麼會發生這種情況。 我具有以下彈簧批量配置:春天批次落實間隔不起作用和奇怪的工作行爲
<beans:bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<beans:property name="corePoolSize" value="50"/>
<beans:property name="maxPoolSize" value="100"/>
<beans:property name="queueCapacity" value="100"/>
</beans:bean>
<job id="creationFlowSaveJob">
<step id="creationFlowCampaignSaveStep">
<tasklet task-executor="taskExecutor"
throttle-limit="5">
<chunk
reader="creationFlowCampaignSaveReader"
processor="creationFlowCampaignSaveProcessor"
writer="creationFlowCampaignSaveWriter"
commit-interval="100"
>
</chunk>
</tasklet>
<listeners>
<listener ref="generalStepLogger"/>
</listeners>
</step>
</job>
所以我有步驟與油門限= 5和提交間隔=「100」和我假定作家將接收的100個項目的塊來寫,並且所有組塊將被逐一處理。
但我有以下流程:
如果工作在流4項,然後我看到作家獲得1項,調用4次,有4個項目,而不是單一的時間。 除此之外,所有這4個調用都在同時執行,意思是在同一時間,這很奇怪。
另一個奇怪的事情是,如果我從tasklet配置中刪除task-executor,那麼job會開始像預期的那樣工作。如果項目數量很大,並且沒有併發編寫器調用,那麼要寫入的文件大小爲4或100。
有人可以解釋爲什麼會發生這種情況嗎? 爲什麼taskExecutor以這種奇怪的方式改變作業流程,以及taskExecutor在作業中的目的是什麼?
請大家幫忙理解這一點,謝謝
謝謝,這解釋了很多 –
贊成票和接受答案,請:) – Dmitry
我想才達到的目標是,我將有5閱讀器,5個處理器和1個寫入器 因此,如果我刪除任務執行程序並保留限制,它將工作? 它應該讀取,處理多線程和一旦項目數量等於承諾間隔發送到寫入器 我理解正確嗎? –