0


SpringBoot 启动项目后执行方法的几种方式

SpringBoot项目启动后初始化执行方法

在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,如我们需要去初始化数据到

redis

缓存、设置策略工厂,或者启动后读取相应的配置等,主要聊聊实现立即执行的几种方法。

一、CommandLineRunner

二、 ApplicationRunner

这两者的实现方法一样,都是去继承相应的接口然后重写

run

方法即可,也都是

SpringBoot

框架所提供给我们的接口,也是项目中最常用的,比较灵活,有多个

CommandLineRunner

ApplicationRunner

实现类时可以通过

@Order

注解或实现

Ordered

接口重写

getOrder

方法实现按指定顺序执行。

@Order(1)//通过order注解指定执行顺序@ComponentpublicclassCommandLineRunnerInitimplementsCommandLineRunner{@Overridepublicvoidrun(String... args)throwsException{System.out.println("CommandLineRunner 启动后执行方法...");}}

ApplicationRunner 通过order注解指定执行顺序

@Order(2)//通过order注解指定执行顺序@ComponentpublicclassApplicationRunnerInitimplementsApplicationRunner{@Overridepublicvoidrun(ApplicationArguments args)throwsException{System.out.println("ApplicationRunner 启动后执行方法...");}}

ApplicationRunner 通过实现 Ordered 指定执行顺序

@Component// 通过实现 Ordered 指定执行顺序publicclassApplicationRunnerInitimplementsApplicationRunner,Ordered{@Overridepublicvoidrun(ApplicationArguments args)throwsException{System.out.println("ApplicationRunner 启动后执行方法...");}@OverridepublicintgetOrder(){return0;}}

这两者的不同其实就是

run

方法中所接收的参数类型不同,

CommandLineRunner

是对我们启动

jar

包时所传参数不进行处理,原样返回

String

类型给你,

ApplicationRunner

是封装成了

ApplicationArguments

参数,通过这个类型可以更方便的判断某些参数是否存在之类的。

二、JDK提供的@PostConstruct

@PostConstruct是JDK所提供的注解,使用该注解的方法会在服务器加载Servlet的时候运行。也可以在一个类中写多个方法并添加这个注解。

@ComponentpublicclassPostConstructTest{@PostConstructpublicvoidinti1(){System.out.println("@PostConstruct 方法1执行...");}@PostConstructpublicvoidinti2(){System.out.println("@PostConstruct 方法2执行...");}}

三、其他方法

3.1 ApplicationContextAware

ApplicationContextAware 一般被用来获取applicationContext上下文信息,并且也可以启动时被执行

@ComponentpublicclassApplicationContextAwareTestimplementsApplicationContextAware{privateApplicationContext applicationContext;@OverridepublicvoidsetApplicationContext(ApplicationContext applicationContext)throwsBeansException{this.applicationContext = applicationContext;System.out.println("ApplicationContextAware 方法执行...");}}

3.2 ApplicationListener

ApplicationListener 事件监听,启动会执行多个监听器【会多次执行】,具体可了解Springboot服务启动过程。

@ComponentpublicclassApplicationListenerTestimplementsApplicationListener{@OverridepublicvoidonApplicationEvent(ApplicationEvent event){System.out.println("ApplicationListener 方法执行...");}}

3.3 InitializingBean

InitializingBean 初始化启动后方法执行

@ComponentpublicclassInitializingBeanInitimplementsInitializingBean{@OverridepublicvoidafterPropertiesSet()throwsException{System.out.println("InitializingBean 方法执行...");}}

四、总结

以上多种初始执行方法日志输出为:

ApplicationContextAware 方法执行...InitializingBean 方法执行...@PostConstruct 方法1执行...@PostConstruct 方法2执行...ApplicationListener 方法执行...ApplicationListener 方法执行...ApplicationListener 方法执行...ApplicationListener 方法执行...ApplicationRunner 启动后执行方法...CommandLineRunner 启动后执行方法...ApplicationListener 方法执行...ApplicationListener 方法执行...

存在多个ApplicationRunner、CommandLineRunner可以通过order指定其执行顺序,但其执行顺序没有ApplicationContextAware等高。但一般生产中使用ApplicationRunner、CommandLineRunner,因为其更加灵活。

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/qq_42247619/article/details/131724017
版权归原作者 无梦. 所有, 如有侵权,请联系我们删除。

“SpringBoot 启动项目后执行方法的几种方式”的评论:

还没有评论