CommandLineRunner和ApplicationRunner的作用和使用示例
2025-09-08 09:48:06 / c罗世界杯图片CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两个接口,用于在 Spring 应用程序启动后执行特定的代码逻辑。它们的主要区别在于对命令行参数的处理方式。以下是对这两个接口的详细介绍:
1. CommandLineRunner
定义
CommandLineRunner 是一个简单的接口,定义了一个 run 方法,该方法会在 Spring 应用程序的上下文完全加载后执行。它接收原始的命令行参数数组 String... args 作为输入。
接口定义
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
特点
简单易用:直接接收原始的命令行参数数组。
适合场景:适用于简单的初始化任务,如打印日志、加载初始数据等。
使用示例
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner: 应用程序已启动!");
System.out.println("命令行参数: " + String.join(", ", args));
}
}
运行结果
如果启动应用时传入了命令行参数 --arg1 value1 --arg2 value2,输出结果为:
CommandLineRunner: 应用程序已启动!
命令行参数: --arg1, value1, --arg2, value2
2. ApplicationRunner
定义
ApplicationRunner 是一个更高级的接口,也定义了一个 run 方法,但在参数处理方面提供了更丰富的功能。它接收一个 ApplicationArguments 对象,该对象可以解析命令行参数并提供更灵活的访问方式。
接口定义
public interface ApplicationRunner {
void run(ApplicationArguments args) throws Exception;
}
特点
功能强大:通过 ApplicationArguments 提供了对命令行参数的灵活解析,包括获取选项和非选项参数。
适合场景:适用于需要对命令行参数进行复杂解析的场景。
使用示例
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("ApplicationRunner: 应用程序已启动!");
// 获取非选项参数
List
System.out.println("非选项参数: " + nonOptionArgs);
// 获取选项参数
Set
System.out.println("选项参数: " + optionNames);
for (String option : optionNames) {
List
System.out.println("选项 " + option + " 的值: " + values);
}
}
}
运行结果
如果启动应用时传入了命令行参数 --arg1 value1 --arg2 value2,输出结果为:
ApplicationRunner: 应用程序已启动!
非选项参数: []
选项参数: [arg1, arg2]
选项 arg1 的值: [value1]
选项 arg2 的值: [value2]
3. 对比
CommandLineRunner
ApplicationRunner
接口定义
void run(String... args)
void run(ApplicationArguments args)
参数处理
原始命令行参数数组 String... args
提供 ApplicationArguments 对象,支持复杂解析
使用场景
简单任务,如打印日志、加载初始数据
需要对命令行参数进行复杂解析的场景
灵活性
较低,适合简单需求
较高,适合复杂需求
4. 总结
如果你的任务只需要简单处理命令行参数,使用 **CommandLineRunner** 即可。
如果你需要对命令行参数进行复杂解析(如选项参数和非选项参数),则建议使用 **ApplicationRunner**。
在实际开发中,你可以根据需求选择适合的接口,甚至可以在同一个项目中同时使用它们。