是否可以在Spring批处理中动态配置作业?
这是我想做的。我创建了几个不同的ItemReader
,ItemWriter
如下所示:
我希望能够在创建批处理作业时动态混合和匹配它们。例如,假设我需要一个有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>
但是我如何像上面一样以编程方式做到这一点?
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批处理配置类: 启动应用程序时,我收到下一个异常: