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

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

在 main 启动函数中调用

这个是在所有启动后执行,也是常用之一。

@SpringBootApplication
public class ListenerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ListenerApplication.class, args);
        System.out.println("启动成功");
    }
}

实现 CommandLineRunner 接口

项目初始化完毕后才会调用方法,提供服务。好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。

@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());
        }
    }
}

注意

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

实现 ApplicationListener 接口

实现 ApplicationListener 接口和实现 ApplicationRunner、CommandLineRunner 接口基本差不多,项目初始化完毕后才会调用方法,提供服务。

@Component
public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("ApplicationStartedEvent");
    }

}

当以 @Component 方式配置时,事件触发顺序如下:

ApplicationListener<ServletWebServerInitializedEvent>
ApplicationListener<ContextRefreshedEvent>
ApplicationListener<ApplicationStartedEvent>
ApplicationListener<ApplicationReadyEvent>
ApplicationListener<ContextClosedEvent>

当通过 /META-INF/spring.factories 配置时,事件触发顺序如下:

org.springframework.context.ApplicationListener=com.xh.event.ApplicationListenerImpl

ApplicationListener<ApplicationStartingEvent>
ApplicationListener<ApplicationEnvironmentPreparedEvent>
ApplicationListener<ApplicationContextInitializedEvent>
ApplicationListener<ApplicationPreparedEvent>
ApplicationListener<ServletWebServerInitializedEvent>
ApplicationListener<ContextRefreshedEvent>
ApplicationListener<ApplicationStartedEvent>
ApplicationListener<ApplicationReadyEvent>
ApplicationListener<ContextClosedEvent>

注意 

  • 如果监听的是 ServletWebServerInitializedEvent、ContextRefreshedEvent、ApplicationStartedEvent 事件,则 ApplicationListener 会在 CommandLineRunner 和 ApplicationRunner 之前执行
  • 如果监听的是 ApplicationReadyEvent 事件,则 ApplicationListener 会在 CommandLineRunner 和 ApplicationRunner 之后执行
  • ContextClosedEvent 当调用关闭方法的时候,才会触发了 ContextClosedEvent 事件

实现 InitializingBean 接口

项目启动时,调用此方法,在 ServletWebServerInitializedEvent 事件前触发。

@Component
public class InitializingExample implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingExample");
    }
}

@PostConstruct 注解

使用注解 @PostConstruct 实现,不推荐使用。如果执行的方法耗时过长,会导致服务无法提供服务。文章来源地址https://www.toymoban.com/news/detail-684390.html

@Component
public class StartBoot {

    @PostConstruct
    public void init() throws InterruptedException {
        System.out.println("@PostConstruct");
    }
}

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

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

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

相关文章

  • 一文详解 springboot 项目启动时异步执行初始化逻辑

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

    2024年02月12日
    浏览(39)
  • springboot整合Activiti-常用方法(部署、启动、查询、执行任务)

    ps:activiti7强依赖security,所以还需要整合security,这里就当整合成功了。 真不会整合,就看我下面这个博文 日常记录-SpringBoot整合SpringSecurity(前后分离)+JWT+Redis 启动成功后就看到下面的表 activiti7默认不生成act_hi历史表 如果不生成历史表,还需要禁用插入历史数据【sprin

    2024年01月20日
    浏览(30)
  • 【SpringBoot】项目启动增加自定义Banner

    最近有个老哥推荐我给博客启动的时候加上自定义Banner,开始我还不太明白他说的是那部分,后面给我发了这样一个,瞬间就懂了~ 也就是用于替换我们启动时候的这个页面 其实修改的方法也比较简单,只需要在resource目录下,放一个banner.txt文件即可,文件下面就存放我们需

    2024年02月20日
    浏览(24)
  • 常见问题03:SpringBoot项目启动初始化数据(执行sql文件)

    使用外部资源中定义的 SQL 脚本填充、初始化或清理数据库。 调用addScript(org.springframework.core.io.Resource)以添加单个 SQL 脚本位置。 调用addScripts(org.springframework.core.io.Resource…)以添加多个 SQL 脚本位置。 请参阅此类中的 setter 方法以获取更多配置选项。 调用populate(java.sql.Connect

    2024年02月13日
    浏览(44)
  • 17、YML配置文件及让springboot启动时加载我们自定义的yml配置文件的几种方式

    其实本质和.properties文件的是一样的。 Spring Boot默认使用SnakeYml工具来处理YAML配置文件,SnakeYml工具默认就会被spring-boot-starter导入,因此无需开发者做任何额外配置。 YAML本质是JSON的超级,它在表示结构化文档时更有表现力。 ▲ properties文件使用 .分隔符 作为结构化的表现:

    2024年02月14日
    浏览(32)
  • SpringBoot项目(Tomcat启动https端口)——springboot配置Tomcat两个端口,https和http的方式 & jar的打包和运行

    1.springboot配置Tomcat两个端口,https和http的方式; 2.在https协议下,发送axios请求没反应,暂时用form表单解决; 3.运行jar包template might not exist报错及解决; 代码位置: https://gitcode.net/Pireley/springboot-tomcat-http-https 严格来说https不是一个独立协议,只是在http协议基础上增加了SSL/T

    2024年02月03日
    浏览(44)
  • 线上宝塔部署的springboot项目在执行elasticsearchRepository.saveAll后就挂掉的解决方法

    当mysql数据库中数据更新后,可以使用 elasticsearchRepository.saveAll() 方法来将新增的数据保存到elasticsearch文档库中。 在我所在的场景下,大概每个月会一下往数据库写入几千条数据,然后一股脑得将之前的数据和新增的数据全部实体交给 saveAll() 方法,那么就会占用大量的内存

    2024年02月14日
    浏览(33)
  • 详谈 springboot整合shiro

    上文学习了shrio 基本概念后,本章将进一步的落地实践学习,在springboot中如何去整合shrio,整个过程步骤有个清晰的了解。   1. 添加依赖:首先,在 pom.xml 文件中添加Spring Boot和Shiro的相关依赖。 2. 创建Shiro配置类:创建一个 ShiroConfig 类,用于配置Shiro的相关信息和组件。(

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

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

    2024年02月13日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包