当前位置: 首页 > 知识库问答 >
问题:

Spring Batch:读取器、处理器和写入器启动时的日志

柳仲卿
2023-03-14

当读卡器、处理器和写入程序在一个步骤中运行时,我只需要打印一次日志。如何做到这一点,使日志不会在每次处理数据块时打印?

批次类

@Configuration
@EnableBatchProcessing
public class Batch
{
    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private ProcessorListener processorListener;

    @Autowired
    private WriterListener writerListener;


    @Autowired
    private MainJobExecutionListener mainJobExecutionListener;

    @Bean
    public Step step(Reader reader, Processor processor, Writer writer)
    {
        return stepBuilderFactory.get("step")
                .<Input, Output>chunk(10)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .faultTolerant().skipPolicy(new ExceptionSkipPolicy())
                .listener(processorListener)
                .listener(writerListener)
                .build();
    }

    @Bean
    public Job mainJob(Step step)
    {
        return jobBuilderFactory.get("mainJob")
                                .listener(mainJobExecutionListener)
                                .incrementer(new RunIdIncrementer())
                                .start(step)
                                .build();
    }
}

处理器侦听器示例类我还有另一个要编写的侦听器类。

@Log4j2
@Component
public class ProcessorListener implements ItemProcessListener<Input, Output>
{
    @Override
    public void beforeProcess(Input input)
    {
        log.info("step: start processor");
    }

    @Override
    public void afterProcess(Input input, Output output) { }

    @Override
    public void onProcessError(Input input, Exception e) { }
}

共有1个答案

贡光明
2023-03-14

您可以在那里使用@PostConstruct注释和日志内容,或者只是在构造函数中使用它?

 类似资料:
  • 项目读取器将数据从特定源代码读入Spring批处理应用程序,而项目写入器将数据从Spring Batch应用程序写入特定目标。 Item处理器是一个包含处理代码的类,该代码处理读入spring批处理的数据。 如果应用程序读取条记录,则处理器中的代码将在每条记录上执行。 块(chunk)是该tasklet的子元素。 它用于执行读取,写入和处理操作。 可以在如下所示的步骤中配置使用此元素的读取器,写入

  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

  • 我正在使用spring批处理,有一个包含两个步骤的工作,第一步(tasklet)验证头CSV,第二步读取一个CSV文件并写入另一个CSV文件,如下所示: 在阅读CSV之前,我使用了一个FlatFileItemReader(在ClassitemReader中)和一个FlatFileItemWriter(在ClassItemWriter中)。我通过下面的tasklet检查CSV文件的头是否正确: 如果

  • 我有“N”没有的。客户/客户。对于每个客户/客户,我需要从数据库(读取器)中获取记录,然后我必须处理(处理器)客户/客户的所有记录,然后我必须将记录写入文件(写入器)。 如何将spring批处理作业循环N次?

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 根据已接受的答案代码,对该代码的以下调整对我起作用: 我已经将这个问题更新到了一个可以正确循环的版本,但是由于应用程序将扩展,能够处理并行是很重要的,我仍然不知道如何在运行时用javaconfig动态地做到这一点... 基于查询列表(HQL查询),我希望每个查询都有一个读取器-处理器-写入器。我当前的配置如下所示: 工单 处理机 作家 目前,该过程对于单个查询来说工作得很好。然而,我实际上有一个查