SpringBoot项目启动后及关闭前执行指定代码实现方式
应用场景
当项目中需要订阅消息时,启动项目后,需开始订阅,而在项目关闭前则需要取消订阅。
具体实现
方法一:通过使用注解
@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方法的入参类型不一致
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于synchronized、volatile、ReentrantLock的区别与对比
这篇文章主要介绍了关于synchronized、volatile、ReentrantLock的区别与对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-04-04
Springboot 整合maven插口调用maven release plugin实现一键打包功能
这篇文章主要介绍了Springboot 整合maven插口调用maven release plugin实现一键打包功能,整合maven-invoker使程序去执行mvn命令,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下2022-03-03
Thread类interrupt interrupted及isInterrupted区别
这篇文章主要为大家介绍了Thread类interrupt interrupted及isInterrupted区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10
Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题
这篇文章主要介绍了Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06


最新评论