4.9 启动系统任务❤❤❤

有一些特殊的任务需要在系统启动时执行,例如配置文件加载、数据库初始化等操作。
Spring Boot对此提供了两种解决方案:CommandLineRunner和ApplicationRunner
CommandLineRunner和ApplicationRunner基本一致,差别主要体现在参数上。

1. CommandLineRunner

1. 实现CommandLineRunner接口

SpringBoot项目在启动时会遍历所有CommandLineRunner的实现类并调用其中的run方法,如果整个系统中有多个CommandLineRunner的实现类,那么可以使用@Order注解对这些实现类的调用顺序进行排序。

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.util.Arrays;@Order(1)
@Component
public class MyCommandLineRunner1 implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("MyCommandLineRunner1>>run"+ Arrays.toString(args));}
}
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.util.Arrays;@Order(2)
@Component
public class MyCommandLineRunner2 implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("MyCommandLineRunner2>>run"+ Arrays.toString(args));}
}

代码解释:

  • @Order(1)注解用来描述CommandLineRunner的执行顺序,数字越小越先执行。
  • run方法中是调用的核心逻辑,参数是系统启动时传入的参数,即入口类中main方法的参数(在调用SpringApplication.run方法时被传入Spring Boot项目中)。
    在这里插入图片描述

2. 在系统启动时,配置传入的参数。

以IntelliJ IDEA为例,配置方式如下:

在这里插入图片描述
在这里插入图片描述

2. ApplicationRunner

ApplicationRunner的用法和CommandLineRunner基本一致,区别主要体现在run方法的参数上。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Set;@Order(1)
@Component
public class MyApplicationRunner1 implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {List<String> nonOptionArgs = args.getNonOptionArgs();System.out.println("MyApplicationRunner1>>nonOptionArgs" + nonOptionArgs);Set<String> optionNames = args.getOptionNames();optionNames.forEach(optionName -> {System.out.println("MyApplicationRunner1>>optionName>>key:" + optionName + ",val:" + args.getOptionValues(optionName));});}
}
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Set;@Order(2)
@Component
public class MyApplicationRunner2 implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {List<String> nonOptionArgs = args.getNonOptionArgs();System.out.println("MyApplicationRunner1>>nonOptionArgs" + nonOptionArgs);Set<String> optionNames = args.getOptionNames();optionNames.forEach(optionName -> {System.out.println("MyApplicationRunner1>>optionName>>key:" + optionName + ",val:" + args.getOptionValues(optionName));});}
}

代码解释:

  • @Order注解依然是用来描述执行顺序的,数字越小越优先执行。
  • 不同于CommandLineRunner中run方法的String数组参数,这里run方法的参数是一个ApplicationArguments对象,如果想从ApplicationArguments对象中获取入口类中main方法接收的参数,调用ApplicationArguments中的getNonOptionArgs方法即可。ApplicationArguments中的getOptionNames方法用来获取项目启动命令行中参数的key,例如将本项目打成jar包,运行java-jar xxx.jar-name=Michael命令来启动项目,此时getOptionNames方法获取到的就是name,而getOptionValues方法则是获取相应的value。
    在这里插入图片描述

部署命令

在这里插入图片描述

3. @PostConstruct ❤❤❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastChat启动与部署通义千问大模型

FastChat简介 FastChat is an open platform for training, serving, and evaluating large language model based chatbots. FastChat powers Chatbot Arena, serving over 10 million chat requests for 70 LLMs.Chatbot Arena has collected over 500K human votes from sid…

[SWPUCTF 2022 新生赛]android

安卓题第一次写 先解压&#xff0c;改apk后缀为zip再次解压用dex2jar反编译得到jar文件&#xff0c;再用jd-gui查看即可得到flag

AI大模型日报#0418:Stable Diffusion 3开放API、Meta新研究让AI Agent理解物理世界

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 微软刚发布了VASA-1 这个人工智能可以让单张图像具有生动的说话和歌唱能力 摘要: 微软发布了VASA-1人工智能&#xff0c;它能使单…

Webstorm 24.1 复制、剪切卡死问题官方回复

Webstorm 24.1 复制、剪切卡死问题官方回复 https://youtrack.jetbrains.com/issue/WEB-65787/WebStorm-2024.1-UI-was-frozen-for-N-ms-after-copy-paste 2024-04-20 更新&#xff1a; UI 卡死问题已于 2024-04-20。发布的 24.1.1 版本解决

Spark集群的搭建

1.1搭建Spark集群 Spark集群环境可分为单机版环境、单机伪分布式环境和完全分布式环境。本节任务是学习如何搭建不同模式的Spark集群&#xff0c;并查看Spark的服务监控。读者可从官网下载Spark安装包&#xff0c;本文使用的是spark-2.0.0-bin-hadoop2.7.gz。 1.1.1搭建单机版…

Linux——进程基本概念中篇

Linux——进程基本概念中篇 文章目录 Linux——进程基本概念中篇一、通过系统调用创建进程——fork1.1 fork的理解1.2 fork的返回值 二、进程状态2.1 运行状态2.2 睡眠状态和休眠状态2.3 停止状态和死亡状态2.4 僵尸进程2.5 孤儿进程2.6 前台和后台进程 三、进程优先级3.1 查看…

一文读懂Partisia Blockhain:兼顾去中心化、安全性与可扩展性

“Partisia Blockhain 解决了区块链领域长期存在的问题&#xff0c;其兼顾了去中心化、安全性以及可扩展性” Partisia Blockchain 是一个具有独特零知识证明预言机以及分片解决方案的 Layer1&#xff0c;解决了困扰整个区块链行业的问题。 目前&#xff0c;多样化的区块链层出…

个人开发微信小程序?我来劝退!

为什么小程序那么受欢迎&#xff1f; 相比传统app&#xff0c;小程序即点即用&#xff0c;免下载安装&#xff0c;这是小程序最明显的优势 但使得小程序真正能火爆&#xff0c;让众多开发者喜欢的原因&#xff0c;还是其强大的分享能力和多端互通能力。寄生与微信这么一个聊天…

SRIO系列-基本概念及IP核使用

参考&#xff1a;串行RapidIO: 高性能嵌入式互连技术 | 德州仪器 SRIO协议技术分析 - 知乎 PG007 目录 一、SRIO介绍 1.1 概要 1.2 SRIO与传统互联方式的比较 1.3 串行SRIO标准 1.4 SRIO层次结构&#xff1a; 1.4.1 逻辑层 1.4.2 传输层协议 1.4.3 物理层 二、Xilinx…

BADI-AC_DOCUMENT-交货单过账科目替代

BADI-AC_DOCUMENT-交货单过账科目替代 一、业务场景 事务代码VL02N/VL22N及其他交货单过账事务&#xff0c;在交货单过账生成会计凭证的时候对科目进行替代 二、BADI增强&#xff1a;AC_DOCUMENT 这个BADI理论上可以处理很多的会计凭证科目替代&#xff0c;不止是交货单过账…

服务注册与发现Eureka、Zookeeper、Consul 三个注册中心的异同点(CAP理论)

Eureka Eureka是由Netflix开源的一个服务注册和发现组件&#xff0c;它主要用于构建高可用、分布式系统的基础设施中。Eureka的服务器端被称为Eureka Server&#xff0c;客户端则是那些需要注册的服务。Eureka具有以下特点&#xff1a; 高可用性&#xff1a;Eureka支持多节点…

探索通过GPT和云平台搭建网安实战培训环境

项目背景 网络安全是一个不断演变的领域&#xff0c;面临着日益复杂的挑战和不断扩大的威胁。数字化时代&#xff0c;随着勒索攻击、数据窃取、网络钓鱼等频频出现&#xff0c;网络攻击的威胁指数和影响范围进一步增加&#xff0c;如何防范网络攻击&#xff0c;确保数据安全&a…

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

漂亮的个人主页源码

源码介绍 漂亮的个人主页源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果截图 源码下载 漂亮的个人主页源码

【正则表达式】正则表达式基本语法元素

目录 字符类量词边界匹配逻辑和分组转义和特殊字符验证正则表达式是否能够成功提取数据 字符类 .&#xff1a;匹配除换行符之外的任何单个字符。 [abc]&#xff1a;匹配方括号内的任何字符。 [^abc]&#xff1a;匹配不在方括号内的任何字符。 [a-z]&#xff1a;匹配任何小写字…

DZY Loves Chemistry (并查集)

//新生训练 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; bool a[60][60]; bool vis[60]; int n; long long int cnt; void bfs(int x) {int y;queue<int> q;v…

真实世界的密码学(二)

原文&#xff1a;annas-archive.org/md5/655c944001312f47533514408a1a919a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;非对称加密和混合加密 本章内容包括 对秘密信息进行加密的非对称加密方法 对数据进行加密到公钥的混合加密方法 非对称和…

互连芯片浪潮席卷AI服务器:突破瓶颈,再创辉煌

改变AI服务器&#xff1a;互连芯片技术创新和突破 AI服务器崛起&#xff0c;引领未来创新根据TrendForce数据&#xff0c;AI服务器出货量达130,000台&#xff0c;占服务器总出货量的1%。主要制造商推出生成式AI产品&#xff0c;推动订单激增。ChatGPT等应用的需求持续增长&…

使用WebSocket实现答题积分排名实时更新的功能

需求分析 接到一个需求&#xff0c;是一个答题积分小程序&#xff0c;其中有一个功能需求是需要实时更新答题积分排名的。之前通常比较常见的需求&#xff0c;都是指定某个时间点才更新答题排行榜的数据的。 经过技术调研&#xff0c;要实现答题积分排名实时更新的功能&#…

加速产能!推荐五款制造业项目管理软件

随着技术的不断发展&#xff0c;许多制造企业开始意识到使用制造业项目管理软件的重要性。在本文中&#xff0c;我们将探讨适用于制造业的项目管理软件&#xff0c;制造业项目管理软件推荐&#xff0c;以帮助项目团队更加高效管理资源。 制造业项目管理难题 怎样正确利用工作资…