用了这么久SpringBoot却还不知道的一个小技巧
前言
你可能调第三方接口喜欢启动application,修改,再启动,再修改,顺便还有个不喜欢写JUnitTest的习惯。
你可能有一天想要在SpringBoot启动后,立马想要干一些事情,现在没有可能是你还没遇到。
那么SpringBoot本身提供了一个小技巧,很多人估计没用过。
正文
1、效果
废话不多说,先写个service和controller展示个效果最实在。
来个简单的service
@Service
public class TestService {
public String test() {
System.err.println("Hello,Java Body ~");
return "Hello,Java Body ~";
}
}
再来个简单的controller
@RestController
@RequestMapping("/api")
@AllArgsConstructor
public class TestController {
private final TestService testService;
@GetMapping("/test")
public ResponseEntity test() {
return ResponseEntity.ok().body(testService.test());
}
}
接下来是不是以为要启动调接口了,No,在SpringBoot的启动类中加这么个玩意儿
@SpringBootApplication
public class JavaAboutApplication {
public static void main(String[] args) {
SpringApplication.run(JavaAboutApplication.class, args);
}
@Bean
CommandLineRunner lookupTestService(TestService testService) {
return args -> {
// 1、test接口
testService.test();
};
}
}
启动看下效果
可以发现,SpringBoot启动后,自动加载了service的执行程序。
这个小案例是想说明什么呢,其实就是CommandLineRunner这么个东西。
2、它是什么
CommandLineRunner
是一个接口,用于在Spring Boot应用程序启动后执行一些特定的任务或代码块。当应用程序启动完成后,Spring Boot会查找并执行实现了CommandLineRunner
接口的Bean。
说白了,就是SpringBoot启动后,我立马想干的事,都可以往里写。
3、我用它做过什么
我的话,和很多厂家对接过接口,在前期不会直接开始写业务,而是先调通接口,再接入业务中。
比如webservice这种,我曾经使用CommandLineRunner直接调对方接口来测试,还挺舒适,也节省了IDEA资源,但要注意调试完成后注释掉,本地测试的时候再打开就行。
4、它还有哪些用途
除了可以拿来调试第三方接口,它还有什么用途吗?
其实开头已经说过,它就是SpringBoot启动后,你立马想干的事,都可以在里面写,所以你完全可以发挥想象去用。
我这里,提供几个思路作为参考。
1)、数据库初始化
你可以使用
CommandLineRunner
来执行应用程序启动时的数据库初始化操作,例如创建表格、插入初始数据等。
2)、缓存预热
CommandLineRunner
在应用程序启动后预热缓存,加载常用的数据到缓存中,提高应用程序的响应速度。
3)、加载外部资源
加载一些外部资源,例如配置文件、静态文件或其他资源。
CommandLineRunner
可以帮助你在启动时读取这些资源并进行相应的处理。
4)、任务初始化
使用
CommandLineRunner
来初始化和配置某些定时任务,确保它们在应用程序启动后立即开始运行。
5)、日志记录
SpringBoot启动后记录一些必要的日志信息,如应用程序版本、环境配置、甚至启动时间等等,这个看具体需求。
6)、组件初始化
你可能需要按照特定的顺序初始化一些组件,
CommandLineRunner
可以帮助你控制初始化顺序,只需要将它们添加到不同的CommandLineRunner
实现类中,并使用@Order
注解指定它们的执行顺序即可。
总结
其实,能用的地方挺多,我最后再举个例子,netty启动时,往往是绑定了端口并以同步形式启动。
但如果要和SpringBoot整合,我们不可能还那么做,而是交给SpringBoot来控制netty的启动和关闭,当SpringBoot启动后,netty启动,当SpringBoot关闭时,netty自然也关闭了,这样才比较优雅。
那么,我们完全可以将netty的启动执行程序放到CommandLineRunner中,这样就可以达到目的了。
没用过的xdm,今天学会一个新知识点了不,可以自己下去试试哦。
持续分享各种经验,持续输出干货,喜欢记得点赞+关注哦~
用了这么久SpringBoot却还不知道的一个小技巧的更多相关文章
- 👊 Spring技术原理系列(7)带你看看那些可能你还不知道的Spring特性技巧哦!
前提介绍 本文主要介绍相关Spring框架的一些新特性问题机制,包含了一些特定注解方面的认识. @Lazy可以延迟依赖注入 @Lazy注解修饰在类层面! @Lazy @Service public c ...
- 10个你可能不知道的JavaScript小技巧
1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...
- 你可能不知道的HTML小技巧 面试题小技巧
程序员面试题库分享 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全 推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...
- [转载]或许您还不知道的八款Android开源游戏引擎
或许您还不知道的八款Android开源游戏引擎 分类: 技术文章 2010-08-04 20:27 17430人阅读 ...
- JS你可能还不知道的一些知识点(一)
js程序是用Unicode字符集编写的, 2.转义字符:反斜线 1 2 3 4 function Test(){ var s='you\'re right,it can\'t be a quote ...
- 你所不知道的 CSS 滤镜技巧与细节
承接上一篇你所不知道的 CSS 动画技巧与细节,本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! OK,下面直接进入正文.本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE ...
- 你所不知道的 CSS 阴影技巧与细节
关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow 的用法. 最近一个新的项目,CSS-Ins ...
- Google开发者大会:你不得不知的Tensorflow小技巧
Google开发者大会:你不得不知的Tensorflow小技巧 同步滚动:开 Google Development Days China 2018近日在中国召开了.非常遗憾,小编因为不可抗性因素滞 ...
- 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例
你所不知道的 CSS 阴影技巧与细节 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow ...
- 【CSS】346- 你所不知道的 CSS 阴影技巧与细节
偷懒了1个多礼拜,在工作饱和的情况下,怎么坚持学习?今天的分享来自@Coco国服第一切图仔,我们聊聊CSS属性box-shadow- 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 ...
随机推荐
- Pose泰裤辣! 一键提取姿态生成新图像
摘要:从图像提取人体姿态,用姿态信息控制生成具有相同姿态的新图像. 本文分享自华为云社区<Pose泰裤辣! 一键提取姿态生成新图像>,作者: Emma_Liu . 人体姿态骨架生成图像 C ...
- Python对两个Excel操作
简介 现在有个需求,我们根据需要 data.xlsx 中某些单元格的内容来查找 find.xlsx 中的某些內容. 数据内容(为了数据安全,所有数据均已模糊处理) data.xlsx内容: find. ...
- 公众号接入 ChatGPT 了!
虽迟但到,用了一段时间的chatgpt,功能确实令人惊叹,也是第一次体验到了交互式编程.不得不说,未来已来,花了一些时间,终于把chatgpt接入到了公众号! 使用方法 打开公众号的对话框,直接提问! ...
- flutter填坑之旅(配置本地资源文件)
一.添加单个资源文件 项目下创建一个assets目录,在该目录下存放对应的资源文件(json.image.-) pubspec.yaml文件中配置资源文件路径(注意缩进要与上下文一直) assets: ...
- (亲测有效-专门解决Mac环境)Pycharm 解决无法打开的问题
前提是Mac 安装了PyCharm.app 1.第一步:先输入: cd /Applications/PyCharm.app/Contents/MacOS 2.第二步:查看无法打开pycharm的原因, ...
- 如何批量修改 GitHub 代码提交作者
批量修改 GitHub 代码提交作者需要进行以下步骤: 首先,你需要 clone 远程仓库到本地,使用以下命令: git clone <repository-url> ``` 将 `< ...
- 【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!
"聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!" 元服务(即原子化服务)是华为"轻量化"服务的新物种,可提供全新 ...
- Pinot2的无人机传感器和摄像头
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 无人机传感器和摄像头在Pinot 2中得到广泛应用,其目的是为Pinot 2提供全面的传感器和 ...
- 如何通过数据warehouse更好地支持企业数字化转型战略
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 <如何通过数据 warehouse 更好地支持企业数字化转型战略> 随着企业数 ...
- 让AI支持游戏AI模型:从经典AI算法到最新技术的应用
目录 20. 让 AI 支持游戏AI模型:从经典 AI 算法到最新技术的应用 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.2.2 最新技术介绍 3. 实现步骤与流 ...