You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot RestAPI项目中如何通过命令行运行CommandLineRunner程序

实现SpringBoot项目中命令行单独执行指定逻辑的方法

下面提供几种实用的实现方式,满足你定期通过批处理执行特定逻辑的需求:

方法一:通过Profile控制执行范围

给你的DemoComponent添加@Profile注解,限定只有激活指定Profile时才会执行该逻辑,平时启动项目不激活这个Profile就不会触发:

@Component
@Profile("cli-task") // 指定仅在该Profile激活时生效
public class DemoComponent implements CommandLineRunner{

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Hello from command line task");
    }
}

命令行运行方式:

  • 打包成Jar后执行:
    java -jar your-project.jar --spring.profiles.active=cli-task
    
  • 用Maven直接运行:
    mvn spring-boot:run -Dspring-boot.run.profiles=cli-task
    

方法二:通过命令行参数触发执行

修改DemoComponent,加入参数判断逻辑,只有当命令行传入指定参数时才执行任务:

import java.util.Arrays;
import org.springframework.stereotype.Component;
import org.springframework.boot.CommandLineRunner;

@Component
public class DemoComponent implements CommandLineRunner{

    @Override
    public void run(String... args) throws Exception {
        // 判断是否携带触发参数,比如--run-cli-task
        boolean needRunTask = Arrays.stream(args)
                .anyMatch(arg -> arg.equals("--run-cli-task"));
        
        if (needRunTask) {
            System.out.println("Hello from command line task");
        }
    }
}

命令行运行方式:

  • Jar包执行:
    java -jar your-project.jar --run-cli-task
    
  • Maven运行:
    mvn spring-boot:run -Dspring-boot.run.arguments="--run-cli-task"
    

方法三:编写独立的主类

单独创建一个不依赖原项目启动逻辑的主类,直接执行你的任务,适合完全独立的批处理场景:

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.SpringApplication;

// 不要添加@Component或@SpringBootApplication,避免被原项目自动扫描
public class CliTaskMain {
    public static void main(String[] args) {
        // 初始化仅包含任务相关Bean的Spring上下文
        try (ConfigurableApplicationContext context = SpringApplication.run(CliTaskConfig.class, args)) {
            TaskExecutor executor = context.getBean(TaskExecutor.class);
            executor.runTask();
        }
    }

    // 配置类,仅扫描任务相关的组件
    @Configuration
    @ComponentScan(basePackages = "com.yourproject.task") // 替换为你的任务类所在包路径
    static class CliTaskConfig {}
}

// 把任务逻辑抽成独立的Service类
import org.springframework.stereotype.Service;

@Service
public class TaskExecutor {
    public void runTask() {
        System.out.println("Hello from command line task");
    }
}

运行方式:

  • IDE中直接运行CliTaskMain的main方法;
  • 打包后通过类路径执行:
    java -cp your-project.jar com.yourproject.CliTaskMain
    
  • 也可以在Maven打包时指定该类为入口,生成独立的可执行Jar。

内容的提问来源于stack exchange,提问作者popchan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:25:20