如何在 springboot 启动之后 执行一段逻辑?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 springboot 启动之后 执行一段逻辑?相关的知识,希望对你有一定的参考价值。
参考技术A不知道 这个问题你思考过没???或者 实际业务场景中 有这种诉求没?
org.springframework.boot.CommandLineRunner 是 Spring Boot 提供的一个接口,当你实现该接口并将之注入 Spring IoC 容器后, Spring Boot 应用启动后就会执行其run方法。一个 Spring Boot 可以存在多个CommandLineRunner的实现,当存在多个时,你可以实现Ordered接口控制这些实现的执行顺序( Order 数值越大优先级越低 )。接下来我们来声明两个实现并指定顺序:
下面让我们通过代码实例 来看看 如何执行的。
首先构造两个类,并加入容器:
启动项目 查看打印日志 顺序~~~
可以看到项目启动之后,自动就执行了,刚好 满足了 我们的需求,容器启动之后自动帮我们调用,前提 类需要加入到容器中并实现接口。
下一节,我们来探讨 另外一种 更常用的 项目启动之后 需要执行的初始化逻辑的变种实现 ~
SpringBoot启动后执行某个方法
参考技术A在项目中,SpringBoot启动后,需要初始化一些业务,要在服务启动后自动执行,不用人去手动操作,即把一些业务放到某方法中,服务启动后可自动执行。总结了3种方法:
用起来和第一种差不多
PostConstruct是Java提供的注解:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
使用时直接方法上面注解,但是会影响服务提供,比如这个方法要执行五分钟 这五分钟之内是无法提供服务的,这个方法是在服务初始化后之前运行, 所以 此方法运行不结束,服务就无法初始化, 在这过程路也无法提供服务。在业务中体验不如上面2种好。
如下:
以上是关于如何在 springboot 启动之后 执行一段逻辑?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Spring Boot应用启动之后立刻执行一段逻辑?本文详解
SpringBoot集成Quartz 开始正常执行,一段时间后任务不执行
如何在SpringBoot启动时执行初始化操作,两个简单接口就可以实现