gpt4 book ai didi

java - 如何使用不同的作业参数多次运行 Spring Batch 作业?

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:05 25 4
gpt4 key购买 nike

我们通过一步创建了一个简单的 Spring 批处理作业。有自定义实现的 ItemReader 和 ItemWriter。 ItemReader 从作业参数中获取初始数据。当作为独立的 java 进程运行时,该批处理可以完美运行。但我们想要的是将批处理托管在某个服务器上。因此,我们创建了 REST 服务来初始化批处理。该服务调用作业 URL 并传递一些参数。该参数作为作业参数传递给批处理。当调用一个参数时,服务和作业运行良好。

但是当我们多次调用该服务(出于测试目的两次)时,批处理的行为会很奇怪。我们正在传递不同的作业参数。但当第二次作业初始化开始执行时,ItemReader 接收到的作业参数值与第一次执行时的作业参数值相同。并且两个执行会互相干扰,共享数据库连接,干扰数据检索等。

我们尝试将可重新启动参数设置为 false,但没有成功。我们还尝试了以下解决方案:

Can we create multiple instances of a same java(spring) batch job?

上述解决方案开始在 JBoss 中给出“Interrupted attempts lock”错误。

经过进一步调查,我们发现 ItemReader 仅初始化一次。这就是为什么它获得相同的作业参数值并干扰之前的执行。

编辑
以下是作业配置:

<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />

<job id="jobid" restartable="false">
<step id="step1">
<tasklet>
<chunk reader="reader" writer="writer"
commit-interval="2">
</chunk>
</tasklet>
</step>
</job>

以下是启 Action 业的代码片段:

JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("jobid");

try {
JobParameters param = new JobParametersBuilder().addString("key","value").toJobParameters();
JobExecution execution = jobLauncher.run(job, param);
} catch (Exception e) {
e.printStackTrace();
}

有人可以建议一些解决方案吗?我是否缺少该步骤的某些配置?提前致谢。

最佳答案

我发现,如果我们静态创建Context和JobLauncher对象,也就是说,如果这两个对象只有一个实例,上面的事情就可以工作。这样,我们就可以多次启动同一个作业,但使用不同的参数。

Class MyClass{
private static ConfigurableApplicationContext context = null;
private static JobLauncher jobLauncher = null;

static{
String[] springConfig = {BatchTokeniserConstants.SPRING_CONFIG_FILE_NAME};
try {
context = new ClassPathXmlApplicationContext(springConfig);
jobLauncher = (JobLauncher) context.getBean("jobLauncher");
BatchTokeniserUtils.loadSystemVaiables();
} catch (BeansException e) {

}
}
}

现在,jobLauncher 可用于多次启动任何作业。

希望对其他人有帮助。

关于java - 如何使用不同的作业参数多次运行 Spring Batch 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31313826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com