SpringBoot项目启动后及关闭前执行指定代码实现方式

 更新时间:2025年10月29日 16:32:31   作者:0和1搭建网络世界  
文章介绍了在Spring Boot项目中,如何通过注解@Component、@PostConstruct和@PreDestroy以及实现ApplicationRunner和CommandLineRunner接口来订阅和取消订阅消息,每种方法都有其特点和适用场景

应用场景

当项目中需要订阅消息时,启动项目后,需开始订阅,而在项目关闭前则需要取消订阅。

具体实现

方法一:通过使用注解

@Component、@PostConstruct和@PreDestroy形式完成

因为上面三个注解是springboot自带,所以不需要额外添加依赖。代码如下

@SpringBootApplication
@EnableAutoConfiguration
public class springMVCProjectApplication {
	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(springMVCProjectApplication.class, args);
		context.close();
	}
}

@Component
@Slf4j
public class RunScript {
	
	@PostConstruct
	public void start(){
		log.info("启动后执行");
	}
	
	@PreDestroy
	public void end(){
		log.info("关闭前执行");
	}
}

从日志可以看出,启动后执行了start方法,而关闭前执行了end方法。

方法二:通过实现ApplicationRunner接口

启动类的代码复用方法一中

@Component
@Slf4j
public class RunScript implements ApplicationRunner{
	
	@Override
	public void run(ApplicationArguments args) throws Exception {
		log.info("在程序启动后执行:"+args);
		
	}
	
	@PreDestroy
	public void destory(){
		log.info("在程序关闭后执行");
	}
}

通过上面日志也可以看出,同样实现的目的,通过重写ApplicationRunner接口的run方法,可以传入参。

方法三:通过实现CommandLineRunner接口

启动类的代码复用方法一中

@Component
@Slf4j
public class RunScript implements CommandLineRunner{
	
	@PreDestroy
	public void destory(){
		log.info("在程序关闭后执行");
	}

	@Override
	public void run(String... args) throws Exception {
		log.info("在程序启动后执行:"+args);
		
	}
}

通过日志可以看到,和方法二基本一致,但是重写的run方法的入参类型不一致

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在idea中利用maven实现多环境配置自动打包的流程步骤

    在idea中利用maven实现多环境配置自动打包的流程步骤

    这篇文章主要介绍了在idea中利用maven实现多环境配置自动打包的流程步骤,文中通过图文和代码示例介绍的非常详细,对大家的学习或工作有一定帮助,需要的朋友可以参考下
    2024-11-11
  • idea中如何过滤某些文件不提交的方法实现

    idea中如何过滤某些文件不提交的方法实现

    本文主要介绍了idea中如何过滤某些文件不提交,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 关于synchronized、volatile、ReentrantLock的区别与对比

    关于synchronized、volatile、ReentrantLock的区别与对比

    这篇文章主要介绍了关于synchronized、volatile、ReentrantLock的区别与对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Spring注解与P/C命名空间超详细解析

    Spring注解与P/C命名空间超详细解析

    Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置
    2022-11-11
  • Springboot 整合maven插口调用maven release plugin实现一键打包功能

    Springboot 整合maven插口调用maven release plugin实现一键打包功能

    这篇文章主要介绍了Springboot 整合maven插口调用maven release plugin实现一键打包功能,整合maven-invoker使程序去执行mvn命令,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 五分钟带你学会用java解析json字符串

    五分钟带你学会用java解析json字符串

    这篇文章主要给大家介绍了关于用java解析json字符串的相关资料,JSON是一种轻量级的、基于文本的、与语言无关的数据交换格式,易于人和机器读写,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 浅谈java继承中是否创建父类对象

    浅谈java继承中是否创建父类对象

    下面小编就为大家带来一篇浅谈java继承中是否创建父类对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Thread类interrupt interrupted及isInterrupted区别

    Thread类interrupt interrupted及isInterrupted区别

    这篇文章主要为大家介绍了Thread类interrupt interrupted及isInterrupted区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题

    Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题

    这篇文章主要介绍了Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java实现本地语音识别与热点检测详解

    Java实现本地语音识别与热点检测详解

    随着语音交互技术的发展,如何高效地处理用户的语音输入成为许多应用的重要课题,下面我们来聊聊如何使用java实现本地语音识别与热点检测,并集成阿里云智能语音服务吧
    2025-05-05

最新评论