当前位置: 首页 > 编程笔记 >

详解SpringBoot程序启动时执行初始化代码

昌招
2023-03-14
本文向大家介绍详解SpringBoot程序启动时执行初始化代码,包括了详解SpringBoot程序启动时执行初始化代码的使用技巧和注意事项,需要的朋友参考一下

因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis。

在SpringBoot项目下,即在容器初始化完毕后执行我们自己的初始化代码。

第一步:创建实现ApplicationListener接口的类

package com.stone;

import com.stone.service.IPermissionService;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

/**
 * @author Stone Yuan
 * @create 2017-12-02 21:54
 * @description
 */
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {

  @Override
  public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
    IPermissionService service = contextRefreshedEvent.getApplicationContext().getBean(IPermissionService.class);
    service.loadUserPermissionIntoRedis();
  }
}

注意:

1、我们自己的初始化代码写在onApplicationEvent里;

2、ContextRefreshedEvent是Spring的ApplicationContextEvent一个实现,在容器初始化完成后调用;

3、以注解的方式注入我们需要的bean,会报空指针异常,因此需要以代码中的方式获取我们要的bean

第二步:在SpringBootApplication中注册我们刚创建的类

package com.stone;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YwythApplication {

  public static void main(String[] args) {
    SpringApplication springApplication = new SpringApplication(YwythApplication.class);
    springApplication.addListeners(new ApplicationStartup());
    springApplication.run(args);
  }
}

利用CommandLineRunner、EnvironmentAware在Spring boot启动时执行初始化代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
//如果有多个这样的类时,可以通过Order指定执行顺序,数值越小执行优先级越高
@Order(value = 0)
public class InitSystemConfig implements CommandLineRunner, EnvironmentAware {


  /*
   * 在服务启动后执行,会在@Bean实例化之后执行,故如果@Bean需要依赖这里的话会出问题
   */
  @Override
  public void run(String... args) {

    //这里可以根据数据库返回结果创建一些对象、启动一些线程等
    

  }

  /*
   * 在SystemConfigDao实例化之后、@Bean实例化之前执行
   * 常用于读取数据库配置以供其它bean使用
   * environment对象可以获取配置文件的配置,也可以把配置设置到该对象中
   */
  @Override
  public void setEnvironment(Environment environment) {

  }
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍docker mysql启动时执行初始化sql,包括了docker mysql启动时执行初始化sql的使用技巧和注意事项,需要的朋友参考一下 1.拉取Mysql镜像 docker pull mysql:5.7 2.检查mysql镜像 3.本地创建mysql外挂的目录 4.启动mysql 5.进入容器,登录mysql,检查发现已创建库 test_database 总结 以上所述是小编给

  • 本文向大家介绍java对象初始化代码详解,包括了java对象初始化代码详解的使用技巧和注意事项,需要的朋友参考一下 本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及final关键字对初始化的影响。另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初始化 这里首先介绍下创建对象的过程: 类型为Dog的一个对象首次创建时,或者Dog类的s

  • 本文向大家介绍Angular如何在应用初始化时运行代码详解,包括了Angular如何在应用初始化时运行代码详解的使用技巧和注意事项,需要的朋友参考一下 前言 想象一下,您的应用需要一些动态配置信息,这些信息在应用启动之前需要动态获取,并在应用运行中使用。 显然不能直接写道静态配置文件中,但是从客户端发出的请求又是一个异步请求,如何协调这个问题呢? 这里,我想向您演示,如何在 Angular 应用初

  • 本文向大家介绍SpringBoot Tomcat启动实例代码详解,包括了SpringBoot Tomcat启动实例代码详解的使用技巧和注意事项,需要的朋友参考一下 废话不多了,具体内容如下所示: 注意: 启动类放在项目的包的最外层最好,这样可以扫描到所有的包路径。 controller: pom 注意:如果想用tomcat7启动要制定你的tomcat版本号。 项目 总结 以上所述是小编给大家介绍的

  • 我按照步骤创建了HelloWorld示例,但它没有运行。它给出了以下错误: 初始化引导层java.lang.module.FindException时出错:读取模块:F:\Develop\Eclipse\HelloWorld\bin时出错,原因是:java.lang.module.InvalidModuleDescriptoRexception:HelloWorld.class在顶级目录中找到(模

  • 本文向大家介绍Java初始化块及执行过程解析,包括了Java初始化块及执行过程解析的使用技巧和注意事项,需要的朋友参考一下 问题:Java对象初始化方式主要有哪几种?分别是什么? 针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式。 还有一种与构造器作用非常相似的是初始化块,它可以对Java对象进行初始化操作。下面主要阐述Java的初始化块及执行过