Springboot启动后执行方法

这篇具有很好参考价值的文章主要介绍了Springboot启动后执行方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、注解@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的大小顺序执行,大的先执行。文章来源地址https://www.toymoban.com/news/detail-412082.html

到了这里,关于Springboot启动后执行方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详谈SpringBoot启动项目后执行自定义方法的方式

    这个是在所有启动后执行,也是常用之一。 项目初始化完毕后才会调用方法,提供服务。好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。 实现 ApplicationRunner 接口和实现 CommandLineRunner 接口基本是一样的。不同的是启动时传参的格式,CommandLineRunner 对于参数

    2024年02月10日
    浏览(27)
  • SpringBoot 启动项目后执行方法的几种方式

    在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,如我们需要去初始化数据到 redis 缓存、设置策略工厂,或者启动后读取相应的配置等,主要聊聊实现立即执行的几种方法。 这两者的实现方法一样,都是去继承相应的接口然后重写 run 方法即可,也都是 S

    2024年02月11日
    浏览(30)
  • @PostConstruct 注解分析

    如果需要在生成对象时就完成某些初始化操作,而且这些初始化操作又依赖于依赖注入 @Autowired ,那么就无法在构造函数中实现。为此,可以使用 @PostConstruct 注解一个方法来完成初始化。 @PostConstruct 注解的方法将会在依赖注入完成后被自动调用。类初始化调用顺序: Constr

    2024年01月19日
    浏览(36)
  • SpringBoot项目启动后执行指定方法的四种实现

    今日的好天气 距离上一次更新帖子已经过了很久很久,久到我也不知道我在搞什么飞机。 国庆节第一天终于搬到了新家,最近量子纠缠比较火,冬天也在路上,匆匆又一年。 @PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在

    2023年04月15日
    浏览(33)
  • Java spring 注解 @PostConstruct 实战讲解

            在最近的学习中,发现了一个非常实用的注解 —— @PostConstruct。通过学习了解,逐步发现它能帮助我更轻松的解决不少原本很复杂的问题。         下面,结合实例介绍 @PostConstruct 注解的特性,因为@PreDestroy基本用不到,所以不浪费篇幅啦。         @PostCons

    2024年02月03日
    浏览(34)
  • Spring-BeanPostProcessor PostConstruct init InitializingBean 执行顺序

    执行顺序探究 新建一个对象用于测试 新建一个TestBeanPostProcessor 实现 BeanPostProcessor 通过注解的 方式进行测试 得到的结果如下: 总结PostProcessBeforeInitialization - PostConstruct - InitializingBean - PostProcessAfterInitialization 通过Bean.xml的方式 执行结果如下: 总结PostProcessBeforeInitialization - I

    2024年01月20日
    浏览(43)
  • SpringBoot启动类@SpringBootApplication注解

    在springBoot的启动类中,提供了一个mai函数的程序入口,来启动加载SpringBoot程序,那么注解@SpringBootApplication,通过源码可以看到,它相当于@ComponentScan + @EnableAutoConfiguration + @SpringBootConfiguration。 通过@SpringBootConfiguration注解的源码得知,其配置了一个@Configuration注解,来声明这

    2024年02月08日
    浏览(34)
  • 一文详解 springboot 项目启动时异步执行初始化逻辑

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 前言 前面的工作中,为了提高地区数据的响应时间,需要加载全国区划数据到 redis 中缓存起来,这个过程希望在项目时启动。 由于初始化全国区划到 redis 中这个过程是

    2024年02月12日
    浏览(36)
  • SpringBoot 动态操作定时任务(启动、停止、修改执行周期)增强版

    前段时间编写了一篇博客 SpringBoot 动态操作定时任务(启动、停止、修改执行周期 ,该篇博客还是帮助了很多同学。 但是该篇博客中的方法有些不足的地方: 只能通过前端控制器controller手动注册任务。【具体的应该是我们提前配置好我们的任务,配置完成后让springboot应用

    2024年02月13日
    浏览(31)
  • Springboot常用方法参数注解及示例

    Springboot常用方法参数注解及示例 一、 @RequestParam : 从URL查询参数中提取数据。 二、 @PathVariable : 从URL路径中提取数据。 三、 @RequestBody : 从请求体中提取数据,并映射到对象。 四、 @RequestHeader : 从请求头中提取数据。 五、 @Validated / @Valid : 启用方法参数校验,确保参

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包