CommandLineRunner的使用

背景

在项目启动时需要做一些数据预加载或者某些操作,需要怎么办呢,方法其实有好几种,这里主要讲一下SpringBoot提供的CommandLineRunner接口的使用。

一、案例说明以及实现

1.实现CommandLineRunner接口

定义一个类实现CommandLineRunner接口,模拟启动项目时的预加载处理。

package com.lbl.run;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class WebStart implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        log.info("------------- WebStart ---------------");
    }
}
  • 启动类
package com.lbl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@Slf4j
@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        log.info("------------- before ---------------");
        SpringApplication.run(SpringbootDemoApplication.class, args);
        log.info("------------- after ---------------");
    }

}
  • 启动启动类,查看日志的打印
    在这里插入图片描述

2.加载的顺序

  • 如果有多个实现类,我们可以使用@Order()注解控制它们的加载顺序,数字越小加载越早。现在创建多一个CommandLineRunnerd的实现类,给它们加上@Order()注解。
package com.lbl.run;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Order(2)
public class WebStart implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        log.info("------------- WebStart ---------------");
    }
}
package com.lbl.run;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Order(1)
public class WebStart2 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        log.info("------------- WebStart2 ---------------");
    }
}

  • 启动启动类,查看日志的打印
    在这里插入图片描述

3.扩展-ApplicationRunner

  • 除了实现CommandLineRunner接口可以完成项目启动时的预加载动作,还有ApplicationRunner也能实现同样的功能,并且在不设置@Order()的情况下,ApplicationRunner的优先级大于CommandLineRunner。
package com.lbl.run;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class WebStart3 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("------------- WebStart3 ---------------");
    }
}

此时注掉前面两个实现类的@Order()注解

  • 启动实现类,查看日志的打印
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch-卷积神经网络

卷积神经网络 基本结构 首先解释一下什么是卷积,这个卷积当然不是数学上的卷积,这里的卷积其实表示的是一个三维的权重,这么解释起来可能不太理解,我们先看看卷积网络的基本结构。 通过上面的图我们清楚地了解到卷积网络和一般网…

剪辑调色软件有哪些 会声会影视频剪辑软件 会声会影和剪映

视频调色做不好,可能不是操作的问题,而是剪辑软件没选对。大师级的画面感,就要用大师级的视频剪辑软件。不用费时费力苦心钻研,也无须死记硬背各种参数的软件,才是真正适合自己的剪辑调色软件。有关剪辑调色软件有哪些…

节省时间,创造价值:人工智能在工作中的实际应用

AI时代的工作流程:智能化操作,创新不止步 在当前的人工智能技术领域,无论是国内研发还是国际上的先进大型模型,本质上均采用了GPT,即生成式预训练Transformer模型。该模型的核心能力在于基于已学习的知识库生成回答。其…

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题: 用Java语言创建的Spring Boot项目中,如何传递数组呢?? 在这个思路中,其实,Java作为一个后端开发的语言,没必要着重于如何传入,我们主要做的便是对传入的数组数据进行处理即可…

李沐动手学习深度学习——3.3练习

欢迎讨论 1. 如果将小批量的总损失替换为小批量损失的平均值,需要如何更改学习率? 找到相关的函数介绍nn.MSELoss 默认api nn.MSELoss中是小批量损失的平均值,所以学习率为0.03 拿到对应的batch loss细节如下: 当学习率为0.0…

TOMCAT的安装与基本信息

一、TOMCAT简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为&#xff0c…

在Jupyter-lab中使用RDKit画分子2D图

在Jupyter-lab中使用RDKit画分子2D图 在做完分子对接后,想看看筛选后的分子的结构。因此想利用Jupyter-lab来画分子的2D图。 1. 安装Jupyter-lab与RDKit 系统:Win11已安装conda RDKit 是一个功能强大、灵活易用的化学信息学工具包,广泛应…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。 比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作,也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下: /*** 缓存接口&#xff0…

力扣周赛387

第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…

SUPER 4PCS配准

一、下载编译 1、下载 链接:STORM-IRIT/OpenGR: OpenGR: A C library for 3D Global Registration (github.com) 不过有部分代码不能成功下载,要到该文件夹再次下载,就是下面标黄的两个文件,下载之后首先解压OpenGR-master.zip&…

python笔记_程序流程控制

A,顺序控制 程序从上到下逐行执行 python定义变量时,会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误,age应在age2之前 B,分支控制 1,单分支if 语法 if 条件表达式 : 代码块 说明…

matplotlib条形图

matplotlib条形图 假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b), 那么如何更加直观的展示该数据? from matplotlib import pyplot as plta ["Wolf Warrior 2", "Fast and Furious 8", "Kung Fu Yoga", "Jo…

【Godot4自学手册】第十九节敌人的血量显示及掉血特效

这一节,我主要学习敌人的血量显示、掉血显示和死亡效果。敌人的血量显示和主人公的血量显示有所不同,主要是在敌人头顶有个红色的血条,受到攻击敌人的血条会减少,并且有掉血数量的文字显示,效果如下: 一、…

写时复制简介

写时复制技术(Copy on Write)是比较常用的一种技术,它的主要目的是延迟减少以及延迟内存的分配,增加执行效率,只有在真正进行写操作的过程中才会真正分配物理资源。同时,也可以保护数据在系统崩溃时出现的丢失。比如,我…

2.2 mul、div、and、or乘除指令及所有寄存器英文名

汇编语言 1. mul乘指令 两个相乘的数,要么都是8位,要么都是16位 两个8位数相乘 一个默认放在al中,另一个放在8位reg或内存字节单元中8位乘法,结果默认放在ax中例如:计算100*10 100和10小于255,可以做8位…

勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

AcWing 4726. 寻找数字

解题思路 在这个二插搜索树中寻找&#xff0c;4和7数量相等&#xff0c;并且大于n的最小数。 相关代码 import java.util.*;public class Main {static String s;static List<Integer> res new ArrayList<>();static long n;static long ansLong.MAX_VALUE;publ…

萌新学习RSA第二天(离线分解整数N)

1.yafu的使用&#xff08;离线环境分解N&#xff09;、 下载 打开 及使用 下载地址&#xff1a;https://sourceforge.net/projects/yafu/ 在下载好的并解压好的文件夹上鼠标右键打开终端 然后输入.\yafu-x64.exe并回车运行 .\yafu-x64.exe 来到这个页面就OK了 然后输入 fa…

如何使用ArcGIS Pro创建最低成本路径

虽然两点之间直线最短&#xff0c;但是在实际运用中&#xff0c;还需要考虑地形、植被和土地利用类型等多种因素&#xff0c;需要加权计算最低成本路径&#xff0c;这里为大家介绍一下计算方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…