如何基于命令行参数加载Spring配置?

问题描述 投票:0回答:1

我有几个不同的@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等。

java spring-boot configuration spring-batch applicationcontext
1个回答
0
投票
我想出了我自己问题的答案。
© www.soinside.com 2019 - 2024. All rights reserved.