spring boot启动加载数据原理分析

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。

为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。

创建实现接口 CommandLineRunner 的类,通过@Component注解,就可以实现启动时加载数据项。使用@Order 注解来定义执行顺序。

IndexStartupRunner.Java类:

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
 * 服务启动执行
 */
@Component
@Order(value=1)
public class IndexStartupRunner implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    System.out.println("
IndexStartupRunner
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 <<<<<<<<<<<<<");
  }
}
IndexStartupRunner2.java类:
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
 * 服务启动执行
 */
@Component
@Order(value=2)
public class IndexStartupRunner2 implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    System.out.println("
IndexStartupRunner2
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 <<<<<<<<<<<<<");
  }
}

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

>>>>>>>>>>>>>>>IndexStartupRunner服务启动执行,执行加载数据等操作<<<<<<<<<<<<<
>>>>>>>>>>>>>>>IndexStartupRunner2服务启动执行,执行加载数据等操作<<<<<<<<<<<<<

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

ComandLineRunner和ApplicationRunner区别和使用

如果需要在springapplication启动之后运行一些特定的代码,可以实现 ApplicationRunner 或
CommandLineRunner 接口。 两个接口以相同的方式工作,并提供了一​​个单一的 run 方法,该方法将被调用
SpringApplication.run(…​) 完成之前。

这两个接口的不同之处在于:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。

以上所述是小编给大家介绍的spring boot启动加载数据原理分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • SpringBoot Tomcat启动实例代码详解

    废话不多了,具体内容如下所示: Application configuration class: @SpringBootApplication public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return appli

  • Spring Boot启动过程全面解析(三)

    我已经很精简了,两篇(Spring Boot启动过程(一).spring Boot启动过程(二))依然没写完,接着来. refreshContext之后的方法是afterRefresh,这名字起的真...好.afterRefresh方法内只调用了callRunners一个方法,这个方法从上下文中获取了所有的ApplicationRunner和CommandLineRunner接口的实现类,并执行这些实现类的run方法.例如Spring Batch的JobLauncherCommandLineRu

  • Spring Boot启动过程完全解析(一)

    之前在排查一个线上问题时,不得不仔细跑了很多遍Spring Boot的代码,于是整理一下,我用的是1.4.3.RELEASE. 首先,普通的入口,这没什么好说的,我就随便贴贴代码了: SpringApplication.run(Application.class, args); --> public static ConfigurableApplicationContext run(Object source, String... args) { return run(new Object[]

  • Spring Boot启动流程分析

    引言 早在15年的时候就开始用spring boot进行开发了,然而一直就只是用用,并没有深入去了解spring boot是以什么原理怎样工作的,说来也惭愧.今天让我们从spring boot启动开始,深入了解一下spring boot的工作原理. 为什么用spring boot 在使用一个东西或者一个工具之前,我们总是会问自己,我为什么要用?用他能给我带来什么好处? * 最大的好处就是spring boot遵从了java**约定大于配置**不用面对一大堆的配置文件,spring boot是根据

  • Spring Boot启动过程完全解析(二)

    上篇给大家介绍了Spring Boot启动过程完全解析(一),大家可以点击参考下 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractApplicationContext类型并调用它的refresh方法.由于AnnotationConfigEmbeddedWebApplicationContext继承自EmbeddedWebApplicationContext,所以会

  • spring boot在启动项目之后执行的实现方法

    前言 我们在web项目启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西 方法如下: 新建一个类:BeforeStartup.java @Configuration public class BeforeStartup implements ApplicationListener<ContextRefreshedEvent> { @Autowired private InitDB initDB; @Override p

  • spring boot启动加载数据原理分析

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现. 创建实现接口 CommandLineRunner 的类,通过@Component注解,就可以实现启动时加载数据项.使用@Order 注解来定义执行顺序. IndexStartupRunner.Java类: import org.springframework.boot.CommandLine

  • Spring Boot 启动加载数据 CommandLineRunner的使用

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现. 很简单,只需要一个类就可以,无需其他配置. 创建实现接口 CommandLineRunner 的类 package org.springboot.sample.runner; import org.springframework.boot.CommandLineRunner; import

  • Spring Boot热加载jar实现动态插件的思路

    目录 一.背景 二.热加载 jar 包 三.动态注册 Bean 3.1. 启动时注册 Bean 3.2. 运行时注册 Bean 四.总结 五.完整 demo 一.背景 动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外,也能接纳第三方开发商按照规范开发的插件. 常见的动态插件的实现方式有 SPI.OSGI 等方案,由于脱离了 Spring IOC 的管理在插件

  • 详解spring boot容器加载完后执行特定操作

    有时候我们需要在spring boot容器启动并加载完后,开一些线程或者一些程序来干某些事情.这时候我们需要配置ContextRefreshedEvent事件来实现我们要做的事情 1.ApplicationStartup类 public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent>{ public void onApplicationEvent(ContextRefreshedEve

  • Spring Boot容器加载时执行特定操作(推荐)

    某些情况下我们需要在 Spring Boot 容器启动加载完后执行一些操作,此时可以通过实现 ApplicationListener<E extends ApplicationEvent> 接口,并指定相应事件来执行操作,例如启动某些自定义守护线程 ApplicationContextEvent 是由 ApplicationContext 引发的事件基类,它有几个实现类: ContextRefreshedEvent :ApplicationContext 容器初始化或者刷新时触发该事件,执行一

  • spring boot动态加载Echart饼状图

    本文实例为大家分享了spring boot动态加载Echart饼状图的具体代码,供大家参考,具体内容如下 先从Echart官网上根据需要下载所需Echart版本,在页面中用script标签引入,这些在Echart官网上有教程.官网上有异步加载和更新Echart图,知道了是动态把查询到的结果按格式拼接到饼状图series里面的data中. 尝试一:在springboot的controller中把查询到的结果拼接好放在map里,跳转到页面, 然后在前台javascript中获取完成动态加载,发现饼状

  • 详解Spring Boot 配置加载顺序及属性加载顺序

    先给大家介绍下spring boot 配置加载顺序,具体内容如下所示: 使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 Spring Boot 里面,可以使用以下几种方式来加载配置.本章内容基于 Spring Boot 2.0 进行详解. 1.properties文件: 2.YAML文件: 3.系统环境变量: 4.命令行参数: 等等-- 我们可

  • 在Spring Boot中加载XML配置的完整步骤

    开篇 在SpringBoot中我们通常都是基于注解来开发的,实话说其实这个功能比较鸡肋,但是,SpringBoot中还是能做到的.所以用不用是一回事,会不会又是另外一回事. 涛锅锅在个人能力能掌握的范围之内,一般是会得越多越好,都是细小的积累,发生质的改变,所以今天和小伙伴们一起分享一下. 实践 1.首先我们新建一个SpringBoot Project ,工程名为 xml 2.添加web依赖,点击Finish完成构建 3.我们新建一个类 SayHello 不做任何配置 package org.t

  • Vue中使用import进行路由懒加载的原理分析

    目录 使用import进行路由懒加载的原理 (1)遵循规范 (2)调用时间 (3)本质 vue路由懒加载,使用import无法处理 解决 使用import进行路由懒加载的原理 首先我们来说说,import 和 require 的区别 node 编程中最重要的思想就是模块化,import 和 require 都是被模块化所使用. (1)遵循规范 require是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 (2)调用时间 require是运行

  • 在Spring Boot中加载初始化数据的实现

    在Spring Boot中,Spring Boot会自动搜索映射的Entity,并且创建相应的table,但是有时候我们希望自定义某些内容,这时候我们就需要使用到data.sql和schema.sql. 依赖条件 Spring Boot的依赖我们就不将了,因为本例将会有数据库的操作,我们这里使用H2内存数据库方便测试: <dependency> <groupId>com.h2database</groupId> <artifactId>h2</arti

随机推荐