好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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中注册我们刚创建的类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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启动时执行初始化代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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) {

 

   }

}

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

原文链接:https://www.cnblogs.com/stonesingsong/p/7957258.html

查看更多关于详解SpringBoot程序启动时执行初始化代码的详细内容...

  阅读:40次