我有几个不同的@Configuration类,每个类对应于一个不同的Spring Batch作业,即,每个配置中都存在一个Job bean,并且给定作业所需的每个Step,Tasklet等都存在于同一配置类中。那样的工作。示例:
@Configuration
public class DemoJobConfiguration(JobBuilderFactory jobBuilderFactory) {
@Bean
public Job demoJob() {
return jobBuilderFactory.get("demoJob").start(...).build();
}
}
@Configuration
public class TestJobConfiguration(JobBuilderFactory jobBuilderFactory) {
@Bean
public Job testJob() {
return jobBuilderFactory.get("testJob").start(...).build();
}
}
该应用程序是命令行应用程序。第一个参数是要运行的作业的名称。基于该参数检索关联的Job Bean,然后使用JobLauncher执行。示例:
@Override
public void run(String... args) throws Exception {
String jobName = args[0];
Job job = prepareJob(jobName); //gets the Job from the application context
JobParameters jobParameters = prepareJobParameters(args); //sets args[1], etc. to JobParameter objects
JobExecution result = jobLauncher.run(job, jobParameters);
}
我想知道的是,是否有一种方法可以使用@Conditional批注(或其他方式)仅在args [0]是某个值(例如,)的情况下才加载配置类,>
@Configuration @Conditional("\"testJob\".equals(args[0])") public class TestJobConfiguration(JobBuilderFactory jobBuilderFactory) { ... }
这样做的优点是,只有与正在运行的作业相关的bean才会被加载到内存中,而与其他作业相对应的bean则永远不会被加载。随着更多的工作被添加到项目中,这将非常有帮助。
是否可以基于命令行参数加载配置?以前做过吗?一个小时的谷歌搜索没有发现任何问题,但我仍然希望有一种方法可以完成此任务。
我有几个不同的@Configuration类,每个类对应于一个不同的Spring Batch作业,即,每个配置中都存在一个Job bean,而...则需要每个Step,Tasklet等。