Java Springbatch-修改我的应用程序,以便将作业参数传递给我的设置
我目前有如下springbatch应用程序:Java Springbatch-修改我的应用程序,以便将作业参数传递给我的设置,java,spring,spring-batch,Java,Spring,Spring Batch,我目前有如下springbatch应用程序: @SpringBootApplication @EnableBatchProcessing public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 我有一个存储库配置文件,它在本地使用h2 db来维护作业存储库、创建joblauncher和其他东西。这一职
@SpringBootApplication
@EnableBatchProcessing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我有一个存储库配置文件,它在本地使用h2 db来维护作业存储库、创建joblauncher和其他东西。这一职位的突出部分是:
protected JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
最后,在另一个配置文件中有作业bean:
@Bean
public Job databaseCursorJob(@Qualifier("databaseCursorStep") Step exampleJobStep,
JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("databaseCursorJob")
.incrementer(new RunIdIncrementer())
.flow(exampleJobStep)
.end()
.build();
}
我需要能够传递作业参数,如:
JobParameters jobParameters = new JobParametersBuilder()
.addDate("date", new Date())
.toJobParameters();
,主要是为了确保每个作业实例的唯一性。然而,我的问题是,我不知道如何调整我的应用程序来将这些信息传递给工作。我通常会看到作业启动器的传入运行方法,如:
jobLauncher.run(job, new JobParameters());
,但我从来没有真正调用过该方法,因为我想我使用的是springboot应用程序,它可能是通过应用程序上的@EnableBatchProcessing注释在后台完成的
因此,我需要重新配置我的应用程序来更改作业的启动方式,以便能够传递作业参数。然而,我一直没有弄清楚这一点。我很乐意接受任何意见。谢谢。好的,我有一个解决方案。我的好朋友哈辛先生向我指出了这一点,他似乎有发现springbatch解决方案的诀窍,而我自己却无法发现 以下是Hsssine先生的链接: 我接受了我的原始申请:
@SpringBootApplication
@EnableBatchProcessing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
,并替换为:
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
JobLauncher jobLauncher = applicationContext.getBean(JobLauncher.class);
Job job = applicationContext.getBean(Job.class);
JobParameters jobParameters = new JobParametersBuilder()
.addDate("date", new Date())
.toJobParameters();
jobLauncher.run(job, jobParameters);
}
}
此外,我还必须补充:
spring.batch.job.enabled=false
到我的application.properties,它强制springboot绕过auto-magic jobLauncher.run(job,jobParameters),而是寻找我在上面代码的主类中提供的任何替代启动。通过这种方式,我可以直接添加jobParameter,它添加了一个时间戳,以确保每个作业实例都是唯一标识的,这(希望)将防止spring尝试使用旧作业实例标识符重新启动孤立作业实例的徒劳尝试。这将有助于: