gpt4 book ai didi

spring - 在 Spring Batch 中以编程方式运行作业时出现 NoSuchJobException

转载 作者:行者123 更新时间:2023-12-03 15:52:47 24 4
gpt4 key购买 nike

我有一个在启动时运行的作业。我想在我的应用程序的特定点以编程方式运行这项工作,而不是在我启动我的应用程序时。

在启动时运行时我没有问题,但是当我尝试以编程方式运行它时出现“NoSuchJobException”(No job configuration with the name [importCityFileJob] was registered)。

网上看了下,觉得是JobRegistry相关的问题,但是不知道怎么解决。

注意:我的整个批处理配置都是以编程方式设置的,我不使用任何 XML 文件来配置我的批处理和作业。这是我的问题的很大一部分,而我缺乏例子......

这是我运行 Job 的代码:

public String runBatch() {
try {
JobLauncher launcher = new SimpleJobLauncher();
JobLocator locator = new MapJobRegistry();
Job job = locator.getJob("importCityFileJob");
JobParameters jobParameters = new JobParameters(); // ... ?
launcher.run(job, jobParameters);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Something went wrong");
}
return "Job is running";
}

我的工作声明:
@Bean
public Job importCityFileJob(JobBuilderFactory jobs, Step step) {
return jobs.get("importFileJob").incrementer(new RunIdIncrementer()).flow(step).end().build();
}

(我尝试在我的 runBatch 方法中将 importCityFileJob 替换为 importFileJob,但没有成功)

我的 BatchConfiguration 文件包含上面的作业声明、步骤声明、itemReader/itemWriter/itemProcessor,仅此而已。
我使用 @EnableBatchProcessing注解。

我是 Spring Batch 的新手,我被这个问题困住了。欢迎任何帮助。

谢谢

编辑:我已经解决了我的问题。我在答案中写下了我的解决方案

最佳答案

这是我必须做的来解决我的问题:

将以下 Bean 添加到 BatchConfiguration :

@Bean
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry) {
JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry);
return jobRegistryBeanPostProcessor;
}

将 JobLocator 替换为 @Autowired JobRegistry,并使用 @Autowired JobLauncher 而不是创建一个。我的 run 方法现在有以下代码:
@Autowired
private JobRegistry jobRegistry;

@Autowired
private JobLauncher launcher;

public String runBatch() {
try {
Job job = jobRegistry.getJob("importCityFileJob");
JobParameters jobParameters = new JobParameters();
launcher.run(job, jobParameters);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Something went wrong");
}
return "OK";
}

我希望它会帮助某人。

关于spring - 在 Spring Batch 中以编程方式运行作业时出现 NoSuchJobException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850051/

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