当前位置: 首页 > 知识库问答 >
问题:

基于命令行参数的多个Spring boot CommandLineRunner

黄扬
2023-03-14

我已经用spring cloud任务创建了Spring Boot应用程序,它应该执行一些命令(任务)。每个任务/命令都是短命任务,所有任务都是从命令行启动,做一些短命的ETL作业并完成执行。

有一个包含所有命令/任务的spring boot jar。每个任务都是CommandLineRunner,我喜欢根据来自命令行的参数来决定将执行哪些任务(一个或多个)。这样做的最佳做法是什么?我不喜欢有肮脏代码询问“如果其他”或类似的东西。

共有1个答案

姜天宇
2023-03-14

您还可以将CommandLineRunner实现设为@Component和@ConditionalOnExpression(“${SomeProperty:False}”)

然后有多个配置文件,将someproperty设置为true,以便在上下文中包括那些CommandLineRunner。

@Component
@Slf4j
@ConditionalOnExpression("${myRunnerEnabled:false}")
public class MyRunner implements CommandLineRunner {
    @Override
    public void run(String ... args) throws Exception {
        log.info("this ran");
    }
}

并且在yml应用程序-myRunner.yml中

myRunnerEnabled: true
@SpringBootApplication
public class SpringMain {
    public static void main(String ... args) {
        SpringApplication.run(SpringMain.class, args);
    }
}
 类似资料:
  • 问题内容: 经过一些挖掘后,我可以这样运行Linux命令: 我想做的是,在远程计算机上运行以下命令: 我可以从终端成功完成此操作,但是当我尝试在Go中运行它时,出现以下错误: 更新 :为了方便起见,我更新了问题。 问题答案: 根据有关exec软件包的文档,程序名称和参数是方法的不同参数。您应该这样做: 如果您需要更详细的说明,还可以查看go.crypto / ssh 软件包。

  • 这是我得到的问题“编写一个程序来读取和显示2个命令行参数和命令行参数数组的长度”。 这是我用Java给出的答案。。这是正确的吗?

  • 我有几个不同的@Configuration类,每个类对应一个不同的Spring批处理作业,也就是说,每个配置中都有一个作业bean,给定作业所需的每个步骤、Tasklet等都存在于与该作业相同的配置类中。例子: 该应用程序是一个命令行应用程序。第一个参数是要运行的作业的名称。基于该参数检索关联的作业bean,然后使用JobLauncher执行。例子: 我想知道的是,如果args[0]是某个特定值,

  • 为了方便起见,我们支持在运行 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

  • '-m' 选项 显示所有编译的模块,自1.4.0以来,Tengine支持动态模块,static表示静态编译,shared表示动态编译(后面接的是动态模块的版本)。下面是例子: $ nginx -m Tengine version: Tengine/1.4.1 (nginx/1.2.3) loaded modules: ngx_core_module (static) ng