Spring项目启动指定方法运行
使用场景
在项目中,难免遇到需要部分接口在项目启动的时候提前运行,如:mq的建立,第三方数据来源,数据库字典等等
如何做?
首先我们要根据需求项目在启动的什么时候要加载到缓存中,这里有4种实现方法
1. 利用@PostConstruct注解实现
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
应用:在静态方法中调用依赖注入的Bean中的方法。
package com.example.studySpringBoot.util;
import com.example.studySpringBoot.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class MyUtils {
private static MyUtils staticInstance = new MyUtils();
@Autowired
private MyMethorClassService myService;
@PostConstruct
public void init(){
staticInstance.myService = myService;
}
public static Integer invokeBean(){
return staticInstance.myService.add(10,20);
}
}
2. 实现ApplicationRunner、InitializingBean接口
ApplicationRunner : 是一个接口,里面定义一个run(ApplicationArguments args)方法,我们需要自己写一个类去实现这个这接口,并实现接口里面的run(ApplicationArguments args)方法。
public class Test implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
}
}
public class Test implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
}
}
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。注意,实现该接口的最好加上Spring的注解注入,比如@Component
3.三者在Spring项目启动的执行顺序:
@PostConstruct>InitializingBean>ApplicationRunner
在以上的方法中选择项目合适的就可以啦