1
我試圖在並行的Spring批處理作業中處理一些步驟。作業的XML配置如下:Spring批處理並行Seam上下文,沒有應用程序上下文活動
<batch:job id= "job" job-repository = "jobRepository">
<batch:split id="split" task-executor="taskExecutor">
<batch:flow>
<batch:step id = "step1">
<batch:tasklet transaction-manager = "txManager" >
<batch:chunk reader = "reader1"
processor = "processor1"
writer = "writer1"
commit-interval = "1" />
</batch:tasklet>
</batch:step>
</batch:flow>
<batch:flow>
<batch:step id = "step2">
<batch:tasklet transaction-manager = "txManager">
<batch:chunk reader = "reader2"
processor = "processor2"
writer = "writer2"
commit-interval = "1" />
</batch:tasklet>
</batch:step>
</batch:flow>
</batch:split>
</batch:job>
taskExecutor是一個SimpleAsyncTaskExecutor。
在大塊中,我使用的是閱讀器,處理器和寫入器。這些都依賴於Seam(2.2.2)。
當這些步驟以單線程模式運行時,它們都可以正常工作。但是當它們並行運行時,它們會導致錯誤,因爲沒有可用的Seam上下文。很明顯,因爲創建了一個新線程,並且沒有啓動Seam生命週期(Lifecycle.beginCall())。
我如何確保在處理我的塊時啓動生命週期?我真的不想在我的閱讀器中啓動一個生命週期,並在作者中結束它,但應該在tasklet執行時開始,並在tasklet完成時結束。剛剛步執行之前