java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot应用启动监听

SpringBoot应用程序启动监听功能的常见方法

作者:顽石九变

应用启动监听在 Spring Boot 和其他框架中扮演着重要的角色,它们的主要作用是在应用启动或关闭时触发特定的操作或任务,本文给大家介绍了SpringBoot应用程序启动监听功能的常见方法,需要的朋友可以参考下

一、监听应用启动的常见场景

应用启动监听在 Spring Boot 和其他框架中扮演着重要的角色。它们的主要作用是在应用启动或关闭时触发特定的操作或任务。

以下是一些常见的应用启动监听场景:

  1. 初始化操作:在应用启动时,你可能需要执行一些特定的初始化操作,例如加载配置文件、建立数据库连接池等。通过实现 ApplicationListener 接口或使用 @EventListener 注解,你可以在这些关键时刻添加自定义逻辑,确保你的应用程序能够正确地启动并运行。
  2. 数据预处理:在应用启动时,你可能需要进行数据预处理,例如清理上一次运行遗留的垃圾数据或者将常用的数据加载到内存中。通过实现 CommandLineRunner 或 ApplicationRunner 接口,你可以在应用启动后执行这些任务。
  3. 系统通知:当应用成功启动时,你可以发送一个系统通知,例如通过邮件或消息队列通知其他系统或管理员。这可以帮助你与其他系统集成,提供统一的监控和管理界面。
  4. 健康检查和监控:通过定义健康检查端点、指标收集等功能,你可以对应用进行健康检查和监控。这些功能通常由 Spring Boot Actuator 提供支持。通过监听相应的事件,你可以在应用启动时启用或禁用这些功能。
  5. 依赖服务检查:在应用启动阶段,可以检查依赖服务(如数据库、消息队列、缓存等)是否可用,并在不可用时采取适当的措施,如延迟启动或记录错误。这有助于确保你的应用程序能够在稳定的环境下正常运行。
  6. 动态配置更新:在一些情况下,你需要根据环境变量或其他条件来动态更新应用的配置。通过监听配置文件的修改事件,你可以在应用启动时重新加载配置,以适应不同的环境或配置变化。
  7. 日志记录:在应用启动过程中,你可能希望记录一些关键信息,例如启动时间、版本号、运行环境等。这将有助于问题排查和审计工作。
  8. 安全性检查:在某些情况下,你可能需要在应用启动阶段执行安全性相关的检查,例如验证加密密钥、检查安全漏洞等。通过监听相应的事件,你可以执行这些检查以确保应用的安全性。

二、监听应用启动的方法

在 Spring Boot 中,你可以通过实现 ApplicationListener 接口、使用 @EventListener 注解或实现 CommandLineRunner / ApplicationRunner 接口来创建自定义的启动监听器。这些监听器使得你能够在应用生命周期的关键时刻执行自定义逻辑,从而增强应用的可用性、可维护性和健壮性。

在 Spring Boot 应用中,你可以通过实现特定的接口或使用注解来监听应用的启动和关闭事件。以下是一些常见的方法:

1)实现 ApplicationListener 接口

你可以创建一个类来实现 ApplicationListener 接口,并指定要监听的事件类型。例如,要监听应用启动完成事件,你可以这样做:

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 处理应用启动完成事件
    }
}

2)使用 @EventListener 注解

在 Spring 4.2 及以上版本中,你可以使用 @EventListener 注解来监听事件,而无需实现 ApplicationListener 接口。例如:

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class MyEventListener {

    @EventListener(ApplicationReadyEvent.class)
    public void onApplicationReadyEvent(ApplicationReadyEvent event) {
        // 处理应用启动完成事件
    }
}

3)使用 ApplicationRunner 或 CommandLineRunner 接口

虽然这不是严格意义上的监听器,但 ApplicationRunner 和 CommandLineRunner 接口提供了一种在应用启动后执行代码的方法。这两个接口非常相似,唯一的区别是 CommandLineRunner 的 run 方法接收一个字符串数组作为参数,而 ApplicationRunner 的 run 方法接收一个 ApplicationArguments 对象。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 应用启动后执行代码
    }
}

4)Spring Boot Actuator 的健康检查和指标

虽然不是监听器,但如果你想要在应用运行时监控其状态,你可以使用 Spring Boot Actuator。它提供了健康检查、指标收集等功能。

5)Spring Framework 的事件监听

除了 Spring Boot 提供的事件外,你还可以监听 Spring Framework 定义的事件,例如 ContextRefreshedEvent(当 ApplicationContext 被初始化或刷新时触发)。

记住,当你创建监听器时,确保它们被 Spring 容器管理(例如,通过 @Component 注解将它们声明为 bean),这样它们才能正确接收到事件通知。

三、SpringBoot不同阶段的事件

Spring Boot应用启动过程中的不同阶段分表对应不同的事件:

1)ApplicationStartingEvent

2)ApplicationEnvironmentPreparedEvent

3)ApplicationPreparedEvent

4)ApplicationStartedEvent

5)ApplicationReadyEvent

6)ApplicationFailedEvent

通过监听这些事件,你可以在应用启动和关闭的不同阶段执行自定义逻辑,从而实现更精细的控制和扩展性。例如,你可能希望在 ApplicationReadyEvent 触发后发送一个通知,表明应用已成功启动并准备好接收请求。或者,在 ApplicationFailedEvent 触发时,你可能想要记录详细的错误日志,并通知管理员。

拓展:Springboot 项目启动、关闭 的监听

想在项目启动或是关闭的时候, 做些事情。

例如启动时,打印输出 “你好” , 关闭时,打印输出 “再见”。 

示例:

其实方式很多,但是我推荐 根据官方白皮的建议做。

白皮链接

启动的监听:

 如果需要在SpringApplication启动后运行某些特定代码,可以实现ApplicationRunner或CommandLineRunner接口。两个接口以相同的方式工作,并提供一个单独的运行方法,该方法在SpringApplication.run(…​) 完成。

关闭的监听: 

每个SpringApplication都向JVM注册一个关闭挂钩,以确保ApplicationContext在退出时正常关闭。可以使用所有标准的Spring生命周期回调(如DisposableBean接口或@PreDestroy注释)。

示例使用代码:

StandGuard.jav

import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
 
@Component
public class StandGuard  implements ApplicationRunner, DisposableBean {
    @Override
    public void run(ApplicationArguments args) {
        System.out.println("你好。");
    }
    @Override
    public void destroy() {
        System.out.println("再见!");
    }
}

效果:

以上就是SpringBoot应用程序启动监听功能的常见方法的详细内容,更多关于SpringBoot应用启动监听的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文