作业级对象池在分区步骤组件中可用

时间:2016-12-27 04:29:58

标签: java lucene spring-batch

我有两个步骤,但这两个步骤是分区步骤。

步骤基本上是Lucene索引(第一步)和Lucene搜索步骤(第二步),到目前为止,我在步骤Partitioner中创建了Lucene读者,Lucene搜索器和Lucene编写器对象并传递给相关步骤组件使用@Value注释。

现在需要更改,有时我需要来自另一个线程(另一个分区步骤)的编写器对象在当前线程中(当前分区步骤)但Lucene不允许为同一目录创建多个编写器对象,所以我需要共享这些跨分区步骤的对象。

所以解决方案是创建一个包含所有这些对象的作业级Map,每当我需要一个步骤组件(阅读器,处理器或编写器)时,我就可以从地图中获取这些对象,然后最后我处理/关闭在工作结束时所有这些对象。

我怎样才能做到这一点?即可以jobExecution.getExecutionContext() JobExecutionListenerSupport的{​​{1}}方法将这些对象放入beforeJob(JobExecution jobExecution)吗?

如何在阅读器,处理器和放大器中从此地图中获取特定对象。作家?我不会在配置时知道它,但在运行时。

最后,我将在JobExecutionListenerSupport的{​​{1}}方法中关闭这些对象。

我正在使用基于注释的Spring批量配置和Lucene 6.0。

请建议。

1 个答案:

答案 0 :(得分:0)

我所建议的方法是将ExecutionContext - jobExecution.getExecutionContext()中的这些对象放在方法beforeJob(JobExecution jobExecution)中,然后在afterJob(JobExecution jobExecution)中关闭这些资源对我来说很合适。我没有看到任何问题。

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