首页 > 其他分享 >Springboot启动后执行方法

Springboot启动后执行方法

时间:2023-05-05 17:11:42浏览次数:35  
标签:CommandLineRunner Springboot 启动 args 接口 ApplicationRunner 执行 public

Springboot启动后执行方法

 

文章目录
一、注解@PostConstruct
二、CommandLineRunner接口
三、实现ApplicationRunner接口
四、实现ApplicationListener
五、四种方式的执行顺序

一、注解@PostConstruct

使用注解@PostConstruct是最常见的一种方式,存在的问题是如果执行的方法耗时过长,会导致项目在方法执行期间无法提供服务。

@Component
public class StartInit {
//
//    @Autowired   可以注入bean
//    ISysUserService userService;

    @PostConstruct
    public void init() throws InterruptedException {
        Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务
        System.out.println(123456);
    }
}

 

二、CommandLineRunner接口


实现CommandLineRunner接口 然后在run方法里面调用需要调用的方法即可,好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。

同时该方法也可以接受参数,可以根据项目启动时: java -jar demo.jar arg1 arg2 arg3 传入的参数进行一些处理。

@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println(Arrays.toString(args));
    }
}

 

三、实现ApplicationRunner接口


实现ApplicationRunner接口和实现CommandLineRunner接口基本是一样的。

唯一的不同是启动时传参的格式,CommandLineRunner对于参数格式没有任何限制,ApplicationRunner接口参数格式必须是:–key=value

@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        Set<String> optionNames = args.getOptionNames();
        for (String optionName : optionNames) {
            List<String> values = args.getOptionValues(optionName);
            System.out.println(values.toString());
        }
    }
}

 

四、实现ApplicationListener


实现接口ApplicationListener方式和实现ApplicationRunner,CommandLineRunner接口都不影响服务,都可以正常提供服务,注意监听的事件,通常是ApplicationStartedEvent 或者ApplicationReadyEvent,其他的事件可能无法注入bean。

@Component
public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {
    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("listener");
    }
}

 

五、四种方式的执行顺序


注解方式@PostConstruct 始终最先执行

如果监听的是ApplicationStartedEvent 事件,则一定会在CommandLineRunner和ApplicationRunner 之前执行。

如果监听的是ApplicationReadyEvent 事件,则一定会在CommandLineRunner和ApplicationRunner 之后执行。

CommandLineRunner和ApplicationRunner 默认是ApplicationRunner先执行,如果双方指定了@Order 则按照@Order的大小顺序执行,大的先执行。

标签:CommandLineRunner,Springboot,启动,args,接口,ApplicationRunner,执行,public
From: https://www.cnblogs.com/manmanblogs/p/17374655.html

相关文章

  • 【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用
    在计算机管理中启动时,发现mysql报错:mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。该问题的解决方式为:1找到Mysql的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录......
  • springboot 整合jdbc
    在springboot底层无论关系型还是非关系型数据库都是用spring-data进行交互新建:通过springinitialer勾选重要依赖jdbcapi和mysqldriver:设置数据源配置:通过源码可以看到我们一个通过spring.datasource.xxx来设置我们的yaml配置文件 同时我们可以观察到默认数据源是: y......
  • 【SpringBoot】【二】 SpringApplicationRunListeners 监听器执行过程详解
    1 前言我们看到SpringBoot启动的时候,会在每个时机执行监听器,这节我们就来看看,加载监听器的过程我们就不说了哈,上节说过了哈,本节我们主要看:(1)SpringApplicationRunListeners的创建过程(2)监听器的执行时机有哪些(3)监听器的执行过程三个方面来看哈。2 使用在看之前,我们先......
  • 如何将应用图标固定在Ubuntu的快捷启动栏上
    一、将已有应用的图标固定在快捷启动栏上,步骤如下:1.在/usr/share/applications文件夹中找到相应的应用图标。2.单击应用程序图标并将其拖动到快捷启动栏上。3.释放鼠标按钮,应用程序图标将固定在快捷启动栏上。二、自定义快捷方式固定在快捷启动栏上,步骤如下:......
  • 项目启动
    项目启动启动前端进入D:\code\community\community\Community-manage-front点击上面的地址栏输入cmd然后回车,打开控制台窗口在终端中输入:npmrunserve就能启动看到一下界面就代表启动成功,打开浏览器,输入:http://localhost:8080即可访问启动后端项目进入D:\code......
  • SQL Server事务执行过程中中释放锁导致的死锁问题 - 排查与分析
    0.前情提要系统的某个用来上报数据的接口存在死锁的问题。这个接口内部对多张表进行了Update操作,执行顺序为A表、B表、C表、D表、A表。死锁发生的SQL,一条是第一次更新A表的SQL,另一条是第二次更新A表的SQL。整个更新都处在一个事务内,理论上讲,只要第一个Session开始执行事务,第二个......
  • SpringBoot 超大文件上传和断点续传的实现
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • springboot,maven多模块打jar包踩坑
    父工程msgdemo中msgdemoimpl依赖gson_enum模块。在msgdemoimpl中有controller接口代码一开始在该pom中使用了import指定了该依赖的范围,所以打包失败。使用默认的范围即可。......
  • apipost利用预执行脚本生成不同的测试数据
    apipost利用预执行脚本生成随机的测试数据完整流程使用JavaScript编写预执行脚本进入自动化测试功能界面新建自动化测试,添加接口进去配置执行次数和间隔完成简单介绍apipost提供了强大的接口测试功能,方便我们进行接口测试的各种操作具体步骤1.使用JavaScript编写预......
  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策
    场景设计模式-策略模式在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127622238上面讲了策略模式在Java中的使用示例。下面看一个在SpringBoot中的实际使用示例。业务场景:有多个煤矿,信号灯有多个厂家/规则,每个煤矿对应一种信号灯。需要编......