Spring Boot 启动加载数据 CommandLineRunner

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。

很简单,只需要一个类就可以,无需其他配置。
创建实现接口 CommandLineRunner 的类

<span class="hljs-keyword">package org.springboot.sample.runner;

<span class="hljs-keyword">import org.springframework.boot.CommandLineRunner;
<span class="hljs-keyword">import org.springframework.stereotype.Component;

<span class="hljs-javadoc">/**
 * &#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;
 *
 *<span class="hljs-javadoctag"> @author   &#x5355;&#x7EA2;&#x5B87;(365384722)
 *<span class="hljs-javadoctag"> @myblog  http://blog.csdn.net/catoop/
 *<span class="hljs-javadoctag"> @create    2016&#x5E74;1&#x6708;9&#x65E5;
 */
<span class="hljs-annotation">@Component
<span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">MyStartupRunner1 <span class="hljs-keyword">implements <span class="hljs-title">CommandLineRunner {

    <span class="hljs-annotation">@Override
    <span class="hljs-keyword">public <span class="hljs-keyword">void <span class="hljs-title">run(String... args) <span class="hljs-keyword">throws Exception {
        System.out.println(<span class="hljs-string">">>>>>>>>>>>>>>>&#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x52A0;&#x8F7D;&#x6570;&#x636E;&#x7B49;&#x64CD;&#x4F5C;<<<<<<<<<<<<<"); } }< span></");></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。

如下我们使用@Order 注解来定义执行顺序。

<span class="hljs-keyword">package org.springboot.sample.runner;

<span class="hljs-keyword">import org.springframework.boot.CommandLineRunner;
<span class="hljs-keyword">import org.springframework.core.annotation.Order;
<span class="hljs-keyword">import org.springframework.stereotype.Component;

<span class="hljs-javadoc">/**
 * &#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;
 *
 *<span class="hljs-javadoctag"> @author   &#x5355;&#x7EA2;&#x5B87;(365384722)
 *<span class="hljs-javadoctag"> @myblog  http://blog.csdn.net/catoop/
 *<span class="hljs-javadoctag"> @create    2016&#x5E74;1&#x6708;9&#x65E5;
 */
<span class="hljs-annotation">@Component
<span class="hljs-annotation">@Order(value=<span class="hljs-number">2)
<span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">MyStartupRunner1 <span class="hljs-keyword">implements <span class="hljs-title">CommandLineRunner {

    <span class="hljs-annotation">@Override
    <span class="hljs-keyword">public <span class="hljs-keyword">void <span class="hljs-title">run(String... args) <span class="hljs-keyword">throws Exception {
        System.out.println(<span class="hljs-string">">>>>>>>>>>>>>>>&#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x52A0;&#x8F7D;&#x6570;&#x636E;&#x7B49;&#x64CD;&#x4F5C; 11111111 <<<<<<<<<<<<<"); } }< span></");></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<span class="hljs-keyword">package org.springboot.sample.runner;

<span class="hljs-keyword">import org.springframework.boot.CommandLineRunner;
<span class="hljs-keyword">import org.springframework.core.annotation.Order;
<span class="hljs-keyword">import org.springframework.stereotype.Component;

<span class="hljs-javadoc">/**
 * &#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;
 *
 *<span class="hljs-javadoctag"> @author   &#x5355;&#x7EA2;&#x5B87;(365384722)
 *<span class="hljs-javadoctag"> @myblog  http://blog.csdn.net/catoop/
 *<span class="hljs-javadoctag"> @create    2016&#x5E74;1&#x6708;9&#x65E5;
 */
<span class="hljs-annotation">@Component
<span class="hljs-annotation">@Order(value=<span class="hljs-number">1)
<span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">MyStartupRunner2 <span class="hljs-keyword">implements <span class="hljs-title">CommandLineRunner {

    <span class="hljs-annotation">@Override
    <span class="hljs-keyword">public <span class="hljs-keyword">void <span class="hljs-title">run(String... args) <span class="hljs-keyword">throws Exception {
        System.out.println(<span class="hljs-string">">>>>>>>>>>>>>>>&#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x52A0;&#x8F7D;&#x6570;&#x636E;&#x7B49;&#x64CD;&#x4F5C; 22222222 <<<<<<<<<<<<<"); } }< span></");></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

启动程序后,控制台输出结果为:

<span class="xml"><span class="hljs-tag">>>>>>>>>>>>>>>>&#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x52A0;&#x8F7D;&#x6570;&#x636E;&#x7B49;&#x64CD;&#x4F5C; 22222222 <span class="hljs-tag"><<<<<<<<<<<<<
>>>>>>>>>>>>>>>&#x670D;&#x52A1;&#x542F;&#x52A8;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x52A0;&#x8F7D;&#x6570;&#x636E;&#x7B49;&#x64CD;&#x4F5C; 11111111 <span class="hljs-tag"><<<<<<<<<<<<<</span></span></span></span>

根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序。

转自:http://blog.csdn.net/catoop/article/details/50501710

Original: https://www.cnblogs.com/gmq-sh/p/7742118.html
Author: 园芳宝贝
Title: Spring Boot 启动加载数据 CommandLineRunner

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540417/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 这类注解都不知道,还好意思说会Spring Boot ?

    不知道大家在使用Spring Boot开发的日常中有没有用过 @Conditionalxxx注解,比如 @ConditionalOnMissingBean。相信看过Spring B…

    Java 2023年6月14日
    080
  • java 4舍5入

    /** * @Dscription: scale,保留几位小数点 molecular 分子,denominator 分母 * @Author: zyn * @Date: 2021/…

    Java 2023年5月29日
    068
  • 一起来学习android自定义控件3——边缘凹凸的View

    最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面的知识比较薄弱,所以想试试用自定义View来实现。先看设计图效果 …

    Java 2023年6月13日
    092
  • MySQL的优化

    字符串char 定长字符串如 char(8) 低于8个,剩下的用空格填充,高于8个,报异常varchar 不定长字符串如 varchar(8)低于8个,经历收缩过程,变为实际大小….

    Java 2023年6月6日
    0106
  • 提高 nginx 服务器 安全性,稳定性、性能 –经验总结-持续更新

    在日常工作中使用nginx遇到的问题总结: *保持Nginx的及时升级 因为通过查看官方的release note会发现修复了很多bug,不及时更新在生产环境会有更大的风险 去掉不…

    Java 2023年5月30日
    099
  • 对三次PTA大作业的总结—— BLOG_1

    引言:这次的命题人是蔡柯老师,不同与初学c语言,这类java一改我对编程题的认识。想来十分有意义,总结这段时间的做题体会。 PTA大作业一 前言:这次的作业主要考察基础的java程…

    Java 2023年6月8日
    050
  • poi导出excel工具类+注解

    导出excel作为很多页面的常用功能,但是不同页面导出的数据内容和字段不一,不方便操作,本文通过注解和工具类来解决excel通用导出问题 1.注解 通过注解来定义excel字段的名…

    Java 2023年6月9日
    079
  • Axis1.4 调用.net服务出错

    1 出错描述: AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client faultSubcod…

    Java 2023年6月7日
    056
  • windows 2003 不同网段 无法 文件共享 VSS设置

    网上搜索了很多解答,比如设置VPN, 修改ETC表, 自己也设置了VPN,确实可以,设置的过程需要关闭WINDOWS自带的防火墙,让我觉得不太习惯。 就研究了下防火墙的例外项 点击…

    Java 2023年6月14日
    073
  • 5-多线程

    一、创建多线程的四种方式 1.方式一:继承Thread类的方式 创建一个继承于Thread类的子类 重写Thread类的run() –> 将此线程执行的操作声明在…

    Java 2023年6月7日
    086
  • mybatis返回自增主键踩坑记

    背景 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可…

    Java 2023年5月30日
    076
  • 面试官:什么是脚手架?为什么需要脚手架?常用的脚手架有哪些?

    微服务本身是一种架构风格,也是指导组织构建软件的一系列最佳实践集合。然而,业务团队在拆分应用后,会产生更多细粒度服务,并面临这些服务在分布式网络环境中的复杂性。如何专心实现业务逻辑…

    Java 2023年5月29日
    066
  • Java并发编程艺术系列-二、Java并发机制底层原理

    二、Java并发机制底层原理 volatile synchronized 原子操作 2.1 volatile原理与应用 2.1.1 特点 轻量级的 synchronized 共享变…

    Java 2023年6月9日
    093
  • Java 15 新特性:隐藏类

    什么是隐藏类 隐藏类,是一种不能被其他类直接使用的类。引入隐藏类的主要目的是给框架来使用,使得框架可以在运行时生成类,并通过反射间接使用它们。可能有点抽象,不要紧,下面我们通过一个…

    Java 2023年6月9日
    063
  • out与err输出流

    System.in、System.out与System.err 当我们查阅文档可知,out与err都是Java中的输出流,in是”标准”输入流,System…

    Java 2023年6月5日
    073
  • 【米哈游2023届秋招】开启【校招唯一专属内推码EYTUC】

    爆个猛料 很猛的 米哈游7月 又有新岗位啦!!!!不打卡弹性工作。抓紧金7银8面试机会,年中岗位多、急、需求量大,offer流程快。现招:技术(算法、前端、后台、大数据、安卓ios…

    Java 2023年6月8日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球