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);
    }
}
时间: 2024-11-09 06:15:12

SpringBoot程序启动时执行初始化代码的相关文章

spring在web容器启动时执行初始化方法

需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS

如何在ASP.NET Core程序启动时运行异步任务(2)

原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中,我介绍了如何在ASP.NET Core应用程序启动时运行一些一次性异步任务.本篇博客将继续讨论上一篇的内容,如果你还没有读过,我建议你先读一下前一篇. 在本篇博客中,我将展示上一篇博文中提出的"在Program.cs中手动运行异步任务"的实现方法.该实现会使用一些简单的接口和类来封装应用

Spring Boot 5:应用程序启动时初始化资源

需求:应用程序启动后,初始化基础数据.加密证书等操作. 可以使用CommandLineRunner接口来实现,在SpringBoot.run()之后完成资源的初始化工作. 注意:多个Runner需要顺序启动的话,可以使用@Order注解 package sun.flower.diver.modules.system.init; import org.springframework.boot.CommandLineRunner; import org.springframework.core.an

Springboot 启动时Bean初始化,启动异常-Assert.isTrue(condition,message) 报错

Springboot 启动时Bean初始化启动异常Assert.isTrue(condition,message) 报错,如果 condition为false 则会出现 java.lang.IllegalArgumentException: message, org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXXXX' defined in class path re

tomcat启动时自动运行代码

原文链接:http://jingpin.jikexueyuan.com/article/49660.html 作者: 一直向北 发布时间:2015-07-13 11:12:13 方法1:tomcat 自动执行servlet 写一个servlet,在init()方法中写好想要执行的程序,程序如下: eclipse新建一个web\Dynamic Web Project , name = myweb1 , 把tomcat中的 servlet-api.jar复制到lib中,新建一个类MyServlet.

iOS 应用程序启动时要做什么

当您的应用程序启动(无论是在前台或后台),使用您的应用程序委托application:willFinishLaunchingWithOptions:和application:didFinishLaunchingWithOptions:方法来执行以下操作: 检查启动选项字典的内容,了解有关启动应用程序的原因,并做出相应的响应. 初始化您的应用程序的关键数据结构. 准备您的应用程序的窗口和视图以供显示: 在启动时,系统会自动加载您的应用程序的main Storyboard加载初始视图控制器. app

SpringBoot在启动时的多环境配置以及加载顺序

通常我们在开发完成一个SpringBoot项目时,总是要打包部署的. 在启动SpringBoot应用时,我们常常会使用命令java -jar xxx.jar来启动这个服务. 命令java -jar 除了启动应用之外,还可以在命令中指定应用的参数,比如一下带参数的命令: (1)java -jar xxx.jar --server.port=8081,直接以命令的方式来设置服务的访问端口server.port属性,将端口设置为8081; (2)java -jar -Xms1024m -Xmx1024

django启动时执行某个PY文件

Djang启动时,且在读取项目中路由之前执行某个py文件 在任意app的apps.py中的Config类中定义ready方法,并调用autodiscover_modules from django.apps import AppConfig from djngo.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig) name = 'stark' def read(self) autodiscov

Servlet中的init()方法如何才会在服务器启动时执行

如果要想让 servlet 的 init () 方法在服务器启动 时就被执行,则需要在 web.xml 中相应的 servlet 下配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.