【Spring Boot】00
【Spring Boot】00
【Spring Boot】00-系统启动任务一、前言有一些 特殊的任务 需要在 系统启动时 执行。例如 配置文件加载、数据库初始化 等操作。如果没有使用 Spring Boot ,这些问题可以在 Listener 中解决。Spring Boot 对此提供了两种解决方案:CommandLineRunner 和 ApplicationRunner。CommandLi
【Spring Boot】00
有一些 特殊的任务 需要在 系统启动时 执行。例如 配置文件加载、数据库初始化 等操作。如果没有使用 Spring Boot ,这些问题可以在 Listener 中解决。Spring Boot 对此提供了两种解决方案:CommandLineRunner 和 ApplicationRunner。CommandLineRunner 和 ApplicationRunner 基本一致,差别主要体现在参数上。
1、概述
调用机制
Spring Boot 项目在启动时会遍历所有 CommandLineRunner 的实现类并调用其中的 run() 方法;
指定调用顺序
如果整个系统中有多个 CommandLineRunner 的实现类,那么可以使用@Order注解对这些实现类的调用顺序进行排序;
2、代码演示
实现类1
代码语言:javascript代码运行次数:0运行复制package com.zibo.api.runner;
import slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.annotation.Configuration;
import org.annotation.Order;
@Configuration
@Slf4j
@Order(1)
public class MyCommandLineRunnerImplA implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
log.info("启动系统任务:" + "MyCommandLineRunnerImplA == @Order(1)");
}
}
实现类2
代码语言:javascript代码运行次数:0运行复制package com.zibo.api.runner;
import slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.annotation.Configuration;
import org.annotation.Order;
@Configuration
@Slf4j
@Order(2)
public class MyCommandLineRunnerImplB implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
log.info("启动系统任务:" + "MyCommandLineRunnerImplA == @Order(2)");
}
}
、运行结果
4、补充说明
- @Order(number),其中的 number 从小到大执行,也就是值越小越先执行;
- run 方法中的参数是启动系统时传入的参数,即入口类中的 main 方法的参数;
1、概述
ApplicationRunner 的用法和 CommandLineRunner 基本一致,主要区别的 run 方法的参数;
2、代码演示
实现类1
代码语言:javascript代码运行次数:0运行复制package com.zibo.api.runner;
import slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.annotation.Configuration;
import org.annotation.Order;
@Configuration
@Slf4j
@Order(1)
public class MyApplicationRunnerImplA implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("启动系统任务:" + "MyApplicationRunnerImplA == @Order(1)");
}
}
实现类2
代码语言:javascript代码运行次数:0运行复制package com.zibo.api.runner;
import slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.annotation.Configuration;
import org.annotation.Order;
@Configuration
@Slf4j
@Order(2)
public class MyApplicationRunnerImplB implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("启动系统任务:" + "MyApplicationRunnerImplB == @Order(2)");
}
}
、运行结果
4、补充说明
- @Order(number),其中的 number 从小到大执行,也就是值越小越先执行;
- 这里的 run 方法的参数是一个 ApplicationArguments 对象,如果想从 ApplicationArguments 对象中获取 main 函数的参数,调用 ApplicationArguments 对象的 getonOptionArgs 方法即可。ApplicationArguments 对象中使用 getOptionames 方法来获取项目启动命令中的参数 key。 例如将本项目打成 jar 包,运行 java -jar xxx.jar -name=Michael 命令来启动项目,此时 getOptionames 方法获取到的就是 name ,而 getOptionValues 方法则是获取相应的 value
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-23 12:28:53
上一篇:【Spring Boot】031
下一篇:【Spring Boot】029
推荐阅读
留言与评论(共有 12 条评论) |
本站网友 青葙子 | 20分钟前 发表 |
【Spring Boot】00 【Spring Boot】00-系统启动任务一 | |
本站网友 布丁酒店官网 | 30分钟前 发表 |
原始发表:2025-01-06 | |
本站网友 5713交易平台 | 29分钟前 发表 |
补充说明@Order(number) | |
本站网友 食母 | 9分钟前 发表 |
差别主要体现在参数上 | |
本站网友 美容护肤去黑豆 | 4分钟前 发表 |
【Spring Boot】00 【Spring Boot】00-系统启动任务一 | |
本站网友 穴位埋线减肥 | 7分钟前 发表 |
也就是值越小越先执行; 这里的 run 方法的参数是一个 ApplicationArguments 对象 | |
本站网友 mederma | 7分钟前 发表 |
其中的 number 从小到大执行 | |
本站网友 广州王府井百货 | 17分钟前 发表 |
如有侵权请联系 cloudcommunity@tencent 删除前往查看import对象系统springboot | |
本站网友 坐月子食谱30天 | 9分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 天伦不孕不育 | 17分钟前 发表 |
那么可以使用@Order注解对这些实现类的调用顺序进行排序;2 | |
本站网友 桔梗的功效与作用 | 12分钟前 发表 |
其中的 number 从小到大执行 |