SpringBoot启动时让方法自动执行的几种实现方式

摘要:
在springBoot中,我们有时需要让项目在启动时加载相应的数据或提前执行一个方法。实现这一目标的方法是什么?两者之间的区别在于ApplicationRunner中run方法的参数是ApplicationArguments,而CommandLineRunner接口中run方法参数是String数组。4*/ 5@Override6publicvoidrunthrowsException{7System.out.println;8}实现ApplicationRunner接口1/**2*,以指示当bean包含在SpringApplication中时应该运行的接口。

在springBoot中我们有时候需要让项目在启动时提前加载相应的数据或者执行某个方法,那么实现提前加载的方式有哪些呢?接下来我带领大家逐个解答

1.实现ServletContextAware接口并重写其setServletContext方法

SpringBoot启动时让方法自动执行的几种实现方式第1张实现ServletContextAware

注意:该方法会在填充完普通Bean的属性,但是还没有进行Bean的初始化之前执行

2.实现ServletContextListener接口

SpringBoot启动时让方法自动执行的几种实现方式第2张SpringBoot启动时让方法自动执行的几种实现方式第3张
1 /**
2      * 在初始化Web应用程序中的任何过滤器或servlet之前,将通知所有servletContextListener上下文初始化。
3      */
4     @Override
5     public void contextInitialized(ServletContextEvent sce) {
6         //ServletContext servletContext = sce.getServletContext();
7         System.out.println("执行contextInitialized方法");
8     }
实现ServletContextListener接口

3.将要执行的方法所在的类交个spring容器扫描(@Component),并且在要执行的方法上添加@PostConstruct注解或者静态代码块执行(推荐)

SpringBoot启动时让方法自动执行的几种实现方式第4张SpringBoot启动时让方法自动执行的几种实现方式第5张
 1 @Component
 2 public class Test2 {
 3     //静态代码块会在依赖注入后自动执行,并优先执行
 4     static{
 5         System.out.println("---static--");
 6     }
 7     /**
 8      *  @Postcontruct’在依赖注入完成后自动调用
 9      */
10     @PostConstruct
11     public static void haha(){
12         System.out.println("@Postcontruct’在依赖注入完成后自动调用");
13     }
14 }
@Postcontruct

4.实现ApplicationRunner接口 或 实现CommandLineRunner接口(推荐)

业务场景:
应用服务启动时,加载一些数据和执行一些应用的初始化动作。如:删除临时文件,清除缓存信息,读取配置文件信息,数据库连接等。
1、当接口有多个实现类时,提供了@order注解实现自定义执行顺序,也可以实现Ordered接口来自定义顺序。
注意:数字越小,优先级越高,也就是@Order(1)注解的类会在@Order(2)注解的类之前执行。
两者的区别在于:
ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。想要更详细地获取命令行参数,那就使用ApplicationRunner接口
 

SpringBoot启动时让方法自动执行的几种实现方式第6张SpringBoot启动时让方法自动执行的几种实现方式第7张
1 /**
2      * 用于指示bean包含在SpringApplication中时应运行的接口。可以定义多个applicationrunner bean
3      * 在同一应用程序上下文中,可以使用有序接口或@order注释对其进行排序。
4      */
5     @Override
6     public void run(ApplicationArguments args) throws Exception {
7         System.out.println("ApplicationRunner的run方法");
8     }
实现ApplicationRunner接口
SpringBoot启动时让方法自动执行的几种实现方式第8张SpringBoot启动时让方法自动执行的几种实现方式第9张
1 /**
2      * 用于指示bean包含在SpringApplication中时应运行的接口。可以在同一应用程序上下文中定义多个commandlinerunner bean,并且可以使用有序接口或@order注释对其进行排序。
3      * 如果需要访问applicationArguments而不是原始字符串数组,请考虑使用applicationrunner。
4      * 
5      */
6     @Override
7     public void run(String... ) throws Exception {
8         System.out.println("CommandLineRunner的run方法");
9     }
实现CommandLineRunner接口

转自:https://javazhiyin.blog.csdn.net/article/details/113533177

https://blog.csdn.net/weixin_38362455/article/details/83023025

免责声明:文章转载自《SpringBoot启动时让方法自动执行的几种实现方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TiDB-配置调整jQuery LigerUI 插件介绍及使用之ligerGrid下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ExcelDna项目完整工程演示及讲解

原始链接:http://www.cnblogs.com/Charltsing/p/ExcelDnaDemo.html   ExcelDna工程演示讲课内容 1、ExcelDna是啥? 2、ExcelDna项目的价值 3、什么应用场景需要ExcelDna 4、ExcelDna支持哪些功能 5、ExcelDnaProjectDemo代码讲解 1、 ExcelD...

python-flask框架web服务接口开发实例

一、flask flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务。本文就用flask来开发一个接口。 二:安装框架 flask需要先安装再引用。pip install flask 安装成功见截图 三:flask开发接口流程 用flask开发接口的流程为: #__name__代表当前的python文件。把当前的pyth...

BTC_ETH_USDT_自动充提币API接口,钱包对接交易所教程!

 以目前市面上用的最多的优盾钱包开放平台为例。 详细的接口文档如下: 官方接口文档链接:https://www.uduncloud.com/gateway-interface 1、目录 1.1、生成地址 1.2、提币 1.3、代付 1.4、交易回调 1.5、校验地址合法性 1.6、获取商户支持币种信息 2、接口明细 1、生成地址 1.1 场景说明 请求指...

CAS 单点登陆

一、Tomcat配置SSL 1. 生成 server key 以命令方式换到目录%TOMCAT_HOME%,在command命令行输入如下命令:keytool -genkey -alias tomcat_key -keyalg RSA -storepass changeit -keystore server.keystore -validity 3600...

js 接口并发问题

最近听到一个词叫"并发",其实在工作中很多这种处理的场景只是没有并发这种概念,今天总结一下 。 假设场景: 一个普通查询页面,需要刚进页面就同时调用4个接口,只有全部接口都调用完成才能让用户操作这时候怎么办? 首先 es6 可以使用 Promise.all() var a = new Promise((resolve,reject)=>{setTim...

全网最通俗易懂理清mybatis中SqlSession、SqlSessionTemplate、SessionFactory和SqlSessionFactoryBean之间的关系

摘自:https://www.cnblogs.com/xiaoming0601/p/12166160.html 我潇洒的灰大狼又回来啦。今天送大家的一句话是: 保持耐心,永远年轻,永远热泪盈眶。 前言 先容我哭一会儿,呜呜呜~昨晚写了一半的文章,还没保存就盖上盖子准备回家,拔下电源准备把电脑塞进书包带回家完成时,懒惰阻止了我,最终还是没带回家,于是,遭报...