gpt4 book ai didi

java - 如何根据命令行参数加载 Spring 配置?

转载 作者:行者123 更新时间:2023-12-05 03:56:11 31 4
gpt4 key购买 nike

我有几个不同的@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);
}

我想知道的是,如果 args[0] 是某个值,是否有一种方法可以使用 @Conditional 注释(或其他注释)仅加载配置类,例如,

@Configuration
@Conditional("\"testJob\".equals(args[0])")
public class TestJobConfiguration(JobBuilderFactory jobBuilderFactory) {
...
}

这样做的好处是,只有与正在运行的作业相关的 bean 才会被加载到内存中,而与其他作业对应的 bean 永远不会被加载。随着更多工作被添加到项目中,这将非常有用。

是否可以基于命令行参数加载配置?以前做过吗?一个小时的谷歌搜索没有找到任何结果,但我仍然希望有一种方法可以实现这一目标。

最佳答案

我找到了我自己问题的答案。

解决方法:

  1. 以 --jobName=testJob 的形式包含一个命令行参数。 Spring boot 会自动将其加载到环境中 ( https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-external-config.html )

  2. 像这样使用@ConditonalOnProperty 注释:

    @ConditionalOnProperty(value = "jobName", havingValue = "testJob")公共(public)类 TestJobConfiguration { ...

关于java - 如何根据命令行参数加载 Spring 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59685440/

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