【发布时间】:2023-03-09 19:19:01
【问题描述】:
我的工作有两个步骤,但这两个步骤是分区步骤。
步骤基本上是 Lucene 索引(第一步)和 Lucene 搜索步骤(第二步),到目前为止,我正在步骤 Partitioner 中创建 Lucene 阅读器、Lucene 搜索器和 Lucene 编写器对象,并使用 @ 传递给相关的步骤组件987654322@注解。
现在有一个需求变化,有时我需要当前线程(当前分区步骤)中另一个线程(另一个分区步骤)的写入器对象,但 Lucene 不允许为同一目录创建多个写入器对象,所以我需要共享这些跨分区步骤的对象。
所以解决方案是创建一个包含所有这些对象的作业级别Map,并且我在需要时在步骤组件(读取器、处理器或写入器)中从映射中获取这些对象,然后最后我处理/关闭所有这些作业结束时的对象。
我怎样才能做到这一点?即在JobExecutionListenerSupport的beforeJob(JobExecution jobExecution)方法中将这些对象放在jobExecution.getExecutionContext()中可以吗?
如何在阅读器、处理器和写入器中从此地图中获取特定对象?我在配置时不知道,但在运行时不知道。
最后,我将在JobExecutionListenerSupport 的afterJob(JobExecution jobExecution) 方法中关闭这些对象。
我正在使用基于注解的 Spring 批处理配置和 Lucene 6.0。
请提出建议。
【问题讨论】:
标签: java lucene spring-batch