【Springboot】项目启动后执行特定方法
Springboot项目启动后执行特定方法
Springboot给我们提供了两种“开机启动”方式:ApplicationRunner和CommandLineRunner。
这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner,来实现,他们都是在SpringApplication 执行之后开始执行的。
CommandLineRunner接口可以用来接收字符串数组的命令行参数,ApplicationRunner 是使用ApplicationArguments 用来接收参数的
使用ApplicationRunner
/**
* 项目启动执行 ApplicationRunner
*/
@Component
public class MyApplicationRunner implements ApplicationRunner {
private static Logger log = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override
public void run(ApplicationArguments var1) throws Exception{
log.info(" ApplicationRunner 项目启动,开始执行...");
}
}
使用 CommandLineRunner
/**
* 项目启动执行 CommandLineRunner
*/
@Component
public class MyCommandLineRunner implements CommandLineRunner {
private static Logger log = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override
public void run(String... var1) throws Exception {
log.info(" CommandLineRunner 项目启动,开始执行...");
}
}
项目启动测试
2022-08-17 20:25:07.723 INFO 13704 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8089 (https) with context path '/gc'
2022-08-17 20:25:07.763 INFO 13704 --- [ restartedMain] com.chat.gc.GcChatWebrtcApplication : Started GcChatWebrtcApplication in 3.862 seconds (JVM running for 152.095)
2022-08-17 20:25:07.765 INFO 13704 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : ApplicationRunner 项目启动,开始执行...
2022-08-17 20:25:07.765 INFO 13704 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : CommandLineRunner 项目启动,开始执行...
2022-08-17 20:25:07.901 INFO 13704 --- [ restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
指定启动方法执行的顺序
如果想要指定启动方法执行的顺序,可以通过实现org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解来实现。
以ApplicationRunner 为例来分别实现
Ordered接口:
/**
* 项目启动执行 ApplicationRunner
*/
@Component
public class MyApplicationRunner implements ApplicationRunner, Ordered {
private static Logger log = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override
public void run(ApplicationArguments var1) throws Exception{
log.info(" ApplicationRunner 项目启动,开始执行...");
}
@Override
public int getOrder() {
return 1;
}
}
项目启动测试
2022-08-17 20:30:24.063 INFO 7460 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8089 (https) with context path '/gc'
2022-08-17 20:30:24.069 INFO 7460 --- [ restartedMain] com.chat.gc.GcChatWebrtcApplication : Started GcChatWebrtcApplication in 15.202 seconds (JVM running for 20.388)
2022-08-17 20:30:24.071 INFO 7460 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : ApplicationRunner 项目启动,开始执行...
2022-08-17 20:30:24.071 INFO 7460 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : CommandLineRunner 项目启动,开始执行...
Order注解实现方式:
/**
* 项目启动执行 CommandLineRunner
*/
@Order(value = 2)
@Component
public class MyCommandLineRunner implements CommandLineRunner {
private static Logger log = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override
public void run(String... var1) throws Exception {
log.info(" CommandLineRunner 项目启动,开始执行...");
}
}
项目启动测试
2022-08-17 20:41:36.148 INFO 696 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8089 (https) with context path '/gc'
2022-08-17 20:41:36.156 INFO 696 --- [ restartedMain] com.chat.gc.GcChatWebrtcApplication : Started GcChatWebrtcApplication in 18.13 seconds (JVM running for 22.356)
2022-08-17 20:41:36.159 INFO 696 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : ApplicationRunner 项目启动,开始执行...
2022-08-17 20:41:36.160 INFO 696 --- [ restartedMain] com.chat.gc.config.MyCommandLineRunner : CommandLineRunner 项目启动,开始执行...
补充系统退出/关闭时监听
@Component
public class MyApplicationRunner implements ApplicationRunner, DisposableBean {
private static Logger log = LoggerFactory.getLogger(MyApplicationRunner.class);
@Override
public void run(ApplicationArguments args) throws Exception {
log.info(" ApplicationRunner 项目启动,开始执行...");
}
@Override
public void destroy() throws Exception {
log.info(" ApplicationRunner 系统停止运行,开始关闭...");
}
}
日志:
2023-02-02 15:53:35.457 INFO 304 --- [ main] usi.paofu.PaofuApplication : Started PaofuApplication in 18.515 seconds (JVM running for 25.814)
2023-02-02 15:53:35.460 INFO 304 --- [ main] usi.paofu.run.MyApplicationRunner : ApplicationRunner 项目启动,开始执行...
Disconnected from the target VM, address: '127.0.0.1:50138', transport: 'socket'
2023-02-02 15:54:38.641 INFO 304 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
2023-02-02 15:54:38.645 INFO 304 --- [extShutdownHook] usi.paofu.run.MyApplicationRunner : ApplicationRunner 系统停止运行,开始关闭...
2023-02-02 15:54:38.706 INFO 304 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
参考:https://www.cnblogs.com/cnsyear/p/12732168.html
【Springboot】项目启动后执行特定方法的更多相关文章
- Springboot 项目启动后执行某些自定义代码
Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...
- Spring Boot学习--项目启动时执行特定方法
Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRunner. 这两种方法提供的目的是为了满足,在项目启动 ...
- SpringBoot项目启动后再请求远程接口的实现方式
场景 有一个SpringBoot项目需要在启动后请求另一个远程服务拿取配置,而不是加载过程中去请求,可能会出现类没有实例化的场景,因此需要实现项目完全启动后再进行请求的场景. 解决 一般会有两种实现方 ...
- springboot2.X 在项目启动后执行一段自定义代码
场景: 项目需要在项目启动后从数据库初始化一些数据进入redis , 但是没有很适合 的监听器去实现 , 监听 老是在dao初始化之前触发. 解决方法:自定义类实现 ApplicationRunner ...
- 在web项目启动时执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- Springboot项目启动后自动创建多表关联的数据库与表的方案
文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...
- Springboot项目启动后访问不到Controller
1.搭建一个简单的Springboot项目,最开始将启动类main函数与controller放到一个类里,可以正常启动和访问,但是将两个分开再启动时访问就会报错:This application ha ...
- Java项目启动时执行指定方法的几种方式
很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等.这里给出几种解决方案供大家参考. 1. 使用@PostConstruct注解 这个注解呢,可以在 ...
- spring注解之@PostConstruct在项目启动时执行指定方法
一.注解解释 Spring的@PostConstruct注解在方法上,表示此方法是在Spring实例化该Bean之后马上执行此方法,之后才会去实例化其他Bean,并且一个Bean中@PostConst ...
- SpringBoot#应用启动后执行某些逻辑
// 方式1 @Component public class WhenStartupA implements InitializingBean { @Override public void afte ...
随机推荐
- 脚本:bat批处理常用脚本
windows下有很多场景需要编写批处理来解决问题,跟定时任务相结合使用更佳. 1.创建文件,md,mkdir都可以进行文件创建 set AwrPath=D:\OracleTabChk if not ...
- C#写一套最全的MySQL帮助类(包括增删改查)
介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery.ExecuteScalar.ExecuteQuery.ExecuteQuery(泛型).Insert.Update和Delet ...
- Java常见的线程池的创建及使用
文章目录 线程池是什么? 线程池的主要参数 线程池的拒绝策略 创建线程池的方式 关闭线程池 大家好,我是Leo!今天准备和大家一起分享的知识是线程池,刚好今天在看八股文,就顺带写一下并把一些实践的例子 ...
- git拉取代码总提示输入密码解决方法
公司用的gitlab,在项目拉取(git clone)和更新(git pull)的时候,每次都提示输入用户名密码,不胜其烦,解决方法如下: # 首先 git config --global crede ...
- #Python pandas库,读取模块,代码笔记
日常数据清洗中,利用python清洗的第一步就是读取对应文件,今天一起复盘一下数据读取环节的常规操作. csv和xlsx格式读取类似,所以用csv做案例 X-MIND图
- 2022-08-09:以下go语言代码输出什么?A:否,会 panic;B:是,能正确运行;C:不清楚,看投票结果。 package main import ( “fmt“ “syn
2022-08-09:以下go语言代码输出什么?A:否,会 panic:B:是,能正确运行:C:不清楚,看投票结果. package main import ( "fmt" &qu ...
- 2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选
2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你,我选 ...
- 2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务。 福大大 答
2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务. 福大大 答案 ...
- pages.json 文件:globalStyle 全局配置
globalStyle 用于设置应用的状态栏.导航条.标题.窗口背景色等. 属性 类型 默认值 描述 平台差异说明 navigationBarBackgroundColor HexColor #F7F ...
- ComboBox1 绑定手动创建的DataTable
'************************************************** '*过程名称:DT_PAFORMAL '*功能说明:员工类别 '**************** ...