我有几个不同的@Configuration类,每个类对应一个不同的Spring批处理作业,也就是说,每个配置中都有一个作业bean,给定作业所需的每个步骤、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();
}
}
该应用程序是一个命令行应用程序。第一个参数是要运行的作业的名称。基于该参数检索关联的作业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永远不会被加载。随着更多的作业被添加到项目中,这将非常有帮助。
是否可以基于命令行参数加载配置?以前做过吗?一个小时的谷歌搜索没有发现任何东西,但我仍然希望有办法实现这一点。
如果您希望基于命令行参数对条件配置进行更多的控制,您可以创建一个自定义条件,该条件可以使用Application ationArguments类来完全解析选项:
public class CustomCommandLineArgsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
ApplicationArguments args = context.getBeanFactory().getBean(ApplicationArguments.class);
//Do something with the command line arguments.
return true;
}
}
然后,您可以使用@Con条件(Custom47dLineArgsCondition.class)
注释您的配置类。
我想出了自己问题的答案。
解决方案:
>
在--jobName=testJobs的表单中包含命令行参数。Spring Boot将自动加载到环境中(https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-external-config.html)
使用@ConditonalOnProperty注释,如下所示:
@ConditionalOnProperty(value=“jobName”,havingValue=“testJob”)公共类TestJobConfiguration{…}
我已经用spring cloud任务创建了Spring Boot应用程序,它应该执行一些命令(任务)。每个任务/命令都是短命任务,所有任务都是从命令行启动,做一些短命的ETL作业并完成执行。 有一个包含所有命令/任务的spring boot jar。每个任务都是CommandLineRunner,我喜欢根据来自命令行的参数来决定将执行哪些任务(一个或多个)。这样做的最佳做法是什么?我不喜欢有肮脏代
我有一个应用程序,它有两个配置文件,并且还需要一个命令行参数。我想使用命令运行这个应用程序,但每次我这样做时,只有配置文件被选中。 application.properties(默认配置文件) application-prod.properties(产品剖面) 我尝试执行以下命令和时间只有配置文件被选中。 我是否以正确的方式传递spring boot配置文件名称? 还请告知,如果这可以实现使用命令
我希望我的spring应用程序根据它被调用的方式执行不同的操作。所以 将运行webapp 将执行某些功能并退出 等 做这件事的正确方法是什么?
问题内容: 我正在使用eclipse,因此将运行配置设置为 -Dspring-boot.run.arguments =-person.name = firstName 但是,当运行我的应用程序时,出现异常,因为“无法解析值“ $ {person.name}”中的占位符“ person.name”” 问题答案: 这段代码可以正常工作(Spring Boot 2.1.4): 命令行: 输出:
为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv
1.2. 命令行参数 大多数的程序都是处理输入,产生输出;这也正是“计算”的定义。但是, 程序如何获取要处理的输入数据呢?一些程序生成自己的数据,但通常情况下,输入来自于程序外部:文件、网络连接、其它程序的输出、敲键盘的用户、命令行参数或其它类似输入源。下面几个例子会讨论其中几个输入源,首先是命令行参数。 os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从os包的Ar