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

在spring批处理中动态配置作业

董喜
2023-03-14

是否可以在Spring批处理中动态配置作业?

这是我想做的。我创建了几个不同的ItemReaderItemWriter如下所示:

  • FlatFileItemReader

我希望能够在创建批处理作业时动态混合和匹配它们。例如,假设我需要一个有2个步骤的作业。第一步包含一个用于预处理的Tasklet。第二步将有一个Tasklet,用于使用我的阅读器/写入器进行基于块的数据处理......类似这样的东西:

// define job parameters
JobParametersBuilder parameters = new JobParametersBuilder();

// create two steps
TaskletStep step1 = new TaskletStep(); 
TaskletStep step2 = new TaskletStep();
step1.setName("PreProcessingStep");
step2.setName("ChunkReadWriteStep");

// create two TaskLets
Tasklet tasklet1 = new PreProcessingTasklet();
Tasklet tasklet2; <------ HOW DO I ATTACH MY reader/writer IN THIS TASKLET??

// attach the TaskLet to the step
step1.setTasklet(tasklet1);
step2.setTasklet(tasklet2);

// attach the steps to the job
SimpleJob job = new SimpleJob("MyBatchJob");
job.addStep(step1);
job.addStep(step2); 

jobLauncher.run(job, parameters.toJobParameters());

在XML中,我可以执行以下操作:

<job id="MyBatchJob">
    <step id="preprocessing" next="readWriteStep">
        <tasklet ref="PreProcessingTasklet"/>
    </step>
    <step id="readWriteStep">
        <tasklet>
            <chunk reader="FlatFileItemReader" writer="DBItemWriter"/>
        </tasklet>
    </step>
</job>

但是我如何像上面一样以编程方式做到这一点?

共有1个答案

傅边浩
2023-03-14

Spring Batch提供基于java的配置,用于通过java代码而不是XML构建作业。通过使用提供的构建器,您可以根据需要动态构建作业。我强烈建议使用此方法而不是手动连接ChankOrientedTasklet,因为该特定Tasklet中发生了很多事情。

开始使用Spring Batch的java配置的最佳位置是Spring Batch指南:http://spring.io/guides/gs/batch-processing/.使用Spring Boot和java配置等工具开始使用Spring Batch需要15分钟的步行时间。

 类似资料:
  • 当编写器抛出异常时,我希望能够将步骤和作业状态设置为失败。在做了一些调试和检查Spring批处理源代码后,我注意到配置了一个,它认为是一个致命的异常,因此将作业状态设置为FAILED,所以我将代码包装在我的编写器中的一个try-get中,将包装在中,现在作业和步骤状态设置为FAILED,这是我想要的。我不确定这是否是正确的方法,因为我在任何地方都找不到它的文档,的留档也没有提到它。所以,问题是:这

  • 如果是,那么我需要做什么来让它们工作?

  • 我在XML中定义了注入的流,如下所示: 因此,正如您所看到的,我实际上是从的方法启动方法(用于动态创建这些作业定义)。我不确定这是对的。它正在运行,但我不确定是否有一个不同的入口点更适合于这个目的。老实说,我也不知道注释的意义是什么。 当前遇到的问题是,当我从调用时,它会引发以下: 若要使用默认的BatchConfigurer,上下文必须包含一个以上的数据源(found 2)。 注意:我的项目实际

  • 我的Spring批处理应用程序有多个作业,但只有一个作业使用一些特定的Spring Boot自动配置特性: 使用spring-data-jpa自动配置为业务事务配置数据库的作业(不是Spring批处理管理) 根本不使用数据库的作业 我把这两个工作打包在同一个单位,因为从商业角度来看是有意义的。两个作业将一起工作,一个作业的输出将是另一个作业的输入。 运行第二个作业时是否可以禁用特定于数据库的自动配

  • 我们正在处理一个Spring批处理项目(Spring Boot1.2.2.Release),要求使用Spring SFTP集成以一定频率轮询从服务器位置读取文件。我们使用java config实现了Spring批处理,并在使用Spring Integration java config的过程中实现了Spring批处理。我找不到描述上述情况的例子。我浏览了各种链接,但看到的主要是XML配置示例。 h

  • 我有下一个spring批处理配置类: 启动应用程序时,我收到下一个异常: