2016-12-27 16 views
0

我有兩個步驟的工作,但這兩個步驟是分區的步驟。作業級別對象池在分區的步驟組件中可用

步驟基本上是一個Lucene索引(第一步)和Lucene搜索步驟(第二步),截至目前,我正在使用@Value註釋創建Lucene讀取器,Lucene搜索器和Lucene編寫器對象。

現在需要更改,有時需要當前線程(當前分區步驟)中另一個線程(另一個分區步驟)的writer對象,但Lucene不允許爲同一目錄創建多個writer對象,所以我需要共享這些對象跨分區的步驟。

因此,解決方案是創建一個包含所有這些對象的作業水平Map和我從地圖這些對象,每當我需要一個踏板組件(閱讀器,處理器或作家),那麼最後我處理/關閉所有這些對象在工作結束。

我該如何做到這一點?即可以將這些對象放在jobExecution.getExecutionContext()JobExecutionListenerSupportbeforeJob(JobExecution jobExecution)方法中嗎?

如何在閱讀器中獲取此地圖中的特定對象,處理器&作家?我不知道它在配置時間,但在運行時。

最後,我將在JobExecutionListenerSupportafterJob(JobExecution jobExecution)方法中關閉這些對象。

我使用基於批註的Spring批處理配置和Lucene 6.0。

請建議。

回答

0

方法中疑問,把這些對象ExecutionContext - jobExecution.getExecutionContext()的方法beforeJob(JobExecution jobExecution),然後在afterJob(JobExecution jobExecution)關閉這些資源爲我的作品OK由我提出。我沒有看到任何問題。

我只需在需要它的組件中注入 - @Value("#{jobExecutionContext}")