【问题标题】:Job Level Object Pool to be available in partitioned step components作业级对象池可在分区步骤组件中使用
【发布时间】:2023-03-09 19:19:01
【问题描述】:

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

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

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

所以解决方案是创建一个包含所有这些对象的作业级别Map,并且我在需要时在步骤组件(读取器、处理器或写入器)中从映射中获取这些对象,然后最后我处理/关闭所有这些作业结束时的对象。

我怎样才能做到这一点?即在JobExecutionListenerSupportbeforeJob(JobExecution jobExecution)方法中将这些对象放在jobExecution.getExecutionContext()中可以吗?

如何在阅读器、处理器和写入器中从此地图中获取特定对象?我在配置时不知道,但在运行时不知道。

最后,我将在JobExecutionListenerSupportafterJob(JobExecution jobExecution) 方法中关闭这些对象。

我正在使用基于注解的 Spring 批处理配置和 Lucene 6.0。

请提出建议。

【问题讨论】:

    标签: java lucene spring-batch


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多