Java 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和其他东西。这一职

我目前有如下springbatch应用程序:

@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尝试使用旧作业实例标识符重新启动孤立作业实例的徒劳尝试。

这将有助于: