文章目录
- 1. 简介
- 2. 使用
- 1)单个 ApplicationRunner
- 2)获取命令行参数
- 3)多个 ApplicationRunner
- 3. 优点
- 4. 缺点
- 总结
ApplicationRunner 是 Spring Boot 提供的一个接口,与 CommandLineRunner 类似,用于在 Spring Boot 应用程序启动后执行一些任务。通过实现 ApplicationRunner 接口,我们可以在应用程序启动时执行一些初始化操作,例如加载初始数据、建立连接,或者执行其他的启动任务。
1. 简介
ApplicationRunner 接口定义了一个单一的 run 方法,该方法会在应用程序启动后被调用。与 CommandLineRunner 不同的是,ApplicationRunner 的 run 方法接受一个 ApplicationArguments 对象,该对象包含了应用程序启动时传递的命令行参数。
源码如下

2. 使用
1)单个 ApplicationRunner
要实现 ApplicationRunner 接口,只需要实现它的 run 方法。
下面是一个简单的例子:
DemoApplicationRunner.java
package com.cheney.demo;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class DemoApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Hello ApplicationRunner");
}
}
在上述代码中,DemoApplicationRunner 类实现了 ApplicationRunner 接口,并在 run 方法中编写了初始化任务的代码。这个任务会在应用程序启动时执行。
执行:

2)获取命令行参数
与 CommandLineRunner 不同,ApplicationRunner 的 run 方法接受一个 ApplicationArguments 对象,该对象包含了应用程序启动时传递的命令行参数。我们可以通过这个对象获取命令行参数的信息。
package com.cheney.demo;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class DemoApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Hello ApplicationRunner");
System.out.println("非选项参数: " + args.getNonOptionArgs());
}
}
在上述代码中,通过 args.getNonOptionArgs() 获取非选项参数,你可以根据实际需求调整。
配置参数

执行:

3)多个 ApplicationRunner
与 CommandLineRunner 类似,可以同时注册多个 ApplicationRunner 实例,并通过 @Order 注解或 Ordered 接口来指定它们的执行顺序。
DemoApplicationRunner.java
package com.cheney.demo;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(1)
public class DemoApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Hello ApplicationRunner");
}
}
Demo2ApplicationRunner.java
package com.cheney.demo;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(2)
public class Demo2ApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Hello ApplicationRunner 2");
}
}
在上述代码中,DemoApplicationRunner 和 Demo2ApplicationRunner 分别标注了 @Order(1) 和 @Order(2),指定了它们的执行顺序。如果不使用 @Order 注解,可以实现 Ordered 接口来设置顺序。
执行:

3. 优点
-
更灵活的参数传递
ApplicationRunner的run方法接受一个ApplicationArguments对象,该对象包含了应用程序启动时传递的命令行参数。这使得开发者可以更灵活地处理不同的启动参数,满足更复杂的初始化逻辑需求。 -
支持非命令行参数
除了命令行参数,
ApplicationRunner还能处理应用程序启动时传递的非命令行参数,例如通过配置文件或其他方式传递的参数。 -
更多的元数据信息
ApplicationArguments提供了更多的元数据信息,例如应用程序的启动时间、运行时的 JVM 属性等,使得开发者能够更全面地了解应用程序的运行环境。 -
与 Spring Boot 协同工作
ApplicationRunner是 Spring Boot 提供的标准接口,与 Spring Boot 的自动配置和生命周期机制协同工作,确保在应用程序启动时执行初始化任务。
4. 缺点
-
仅适用于 Spring Boot
ApplicationRunner是 Spring Boot 提供的特定接口,因此仅适用于基于 Spring Boot 的应用程序。如果应用程序不使用 Spring Boot,这种方式可能不够适用。 -
局限于启动时执行
ApplicationRunner主要用于在应用程序启动时执行任务,如果需要其他触发点或更细粒度的控制,可能需要考虑其他方式
总结
ApplicationRunner 接口是 Spring Boot 中用于执行应用程序启动任务的一种方便的方式。通过实现这个接口,我们可以在应用程序启动时执行初始化操作,确保应用程序在启动后处于正确的状态。希望这个简单的博客能帮助你理解如何使用 ApplicationRunner。



















