SpringBoot 在项目启动之后执行自定义方法的两种方式小结
作者:Nick 发布时间:2021-05-25 15:46:36
SpringBoot 项目启动之后执行自定义方法的两种方式
在测试配置中心的配置时,想在项目启动成功之后打印配置项,然后需要执行自定义的类
一般项目中也会在这个地方进行初始化数据的一些操作
方式一 实现 CommandLineRunner 接口
自定义类并实现 CommandLineRunner 接口,实现run()方法,需要执行的语句就放在 run() 方法中
例:
@Component
@Order(1) // 控制类执行的顺序越小越靠前
public class StartInitializer implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("项目启动,执行 CommandLineRunner 实现类的方法");
}
}
方式二 实现 ApplicationRunner 接口
自定义类并实现 ApplicationRunner 接口,实现run()方法,需要执行的语句就放在 run() 方法中
例:
@Component
@Order(2) // 控制类执行的顺序越小越靠前
public class AppInitializer implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("项目启动,执行 ApplicationRunner 实现类的方法");
}
}
二者区别
区别在于实现方法 run() 中的参数类型不一样
实现 ApplicationRunner 接口的 run() 方法参数类型为: ApplicationArguments
实现 CommandLineRunner 接口的 run() 方法参数类型为: String...
实现效果
Springboot 项目启动后执行某些自定义代码
Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner。
这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner,来实现,他们都是在SpringApplication 执行之后开始执行的。
CommandLineRunner接口可以用来接收字符串数组的命令行参数,ApplicationRunner 是使用ApplicationArguments 用来接收参数的
代码示例
@Component//被spring容器管理
@Order(1)//如果多个自定义ApplicationRunner,用来标明执行顺序
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
System.out.println("-------------->" + "项目启动,now=" + new Date());
myTimer();
}
public static void myTimer(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("------定时任务--------");
}
}, 0, 1000);
}
}
执行结果
2018-02-08 14:10:16.490 INFO 10236 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
-------------->项目启动,now=Thu Feb 08 14:10:16 CST 2018
------定时任务--------
2018-02-08 14:10:16.497 INFO 10236 --- [ main] com.mlxs.springboot01.web.MainApp : Started MainApp in 5.595 seconds (JVM running for 6.334)
------定时任务--------
------定时任务--------
------定时任务--------
------定时任务--------
------定时任务--------
------定时任务--------
来源:https://www.cnblogs.com/inick/p/15250913.html


猜你喜欢
- 项目介绍java 开发中,参数校验是非常常见的需求。但是 hibernate-validator 在使用过程中,依然会存在一些问题。vali
- SpringBoot自带Tomcat,所以我们的项目可以单独部署,不需要依赖Window、Linux系统中的服务器,所以打包出来的Jar包是
- C# 获取某个时间的0点0分和23点59分59秒,具体代码如下所示:C#获取当月第一天和最后一天当月第一天0时0分0秒:DateTime.N
- 大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加
- 一个线程的生命周期:新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态
- Android 调用百度地图API一、到 百度地图开发平台下载SDKhttp://lbsyun.baidu.com/index.php?ti
- 介绍备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获并保存一个对象的内部状态,并在之后可
- webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录。1.Axis2Axi
- 1. 概述官方JavaDocsApi: javax.swing.JComboBoxJComboBox,下拉列表框。JComboBox以下列列
- 一直以来,我们都是在服务端查询出结果生成JSON字符串,供前端调用,那么我们能否把从前端接受的JSON字符串转换成字典集合,让后台处理呢?比
- maven scope provided和runtime例子maven常用的scope有compile,provided,runtime,t
- Java包装类基本类型大小包装器类型boolean/Booleanchar16bitBooleanbyte8bitByteshort/16b
- java怎么判断三位数先定义个测试数字,如图然后可以把数字转换成字符串来判断它的长度是否为3,如图获取判断数字范围是否在100到1000之间
- 本文实例讲述了C#正则过滤HTML标签并保留指定标签的方法。分享给大家供大家参考,具体如下:这边主要看到一个过滤的功能:public sta
- 两个接口都是继承自Collection.List (inteface) 次序是List 的最重要特点,它确保维护元素特定的顺序. --Arr
- 今天就来拿贪吃蛇小游戏来练练手吧!贪吃蛇游戏规则: 1.按下空格键(游戏未结束)则游戏
- 前言我们从以下几个方面研究:SpringBoot的启动依赖启动器starter有什么作用启动引导类是怎么运行的内置的tomcat服务器原理p
- Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new
- 代理模式代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远
- Prim算法介绍1.点睛在生成树的过程中,把已经在生成树中的节点看作一个集合,把剩下的节点看作另外一个集合,从连接两个集合的边中选择一条权值