为了实现以上场景下的需求,这里就用到了SpringBoot或者说Spring的消息通知功能,重点是继承自 ApplicationEvent (Spring-context)的 SpringApplicationEvent (SpringBoot),而 ApplicationEvent 继承来自 EventObject (jdk),这里 SpringApplicationEvent 的source是 ApplicationContext 。
看名知义,该类型是在实例关闭的时候触发,在启动的时候会注册 shutdownHook ,当实例关闭的时候, shutdownHook 触发 org.springframework.context.support.AbstractApplicationContext.doClose() 关闭动作,在这个方法里执行
该事件是在启动过程中触发,在启动主要方法 org.springframework.boot.SpringApplication.run(java.lang.String...) 执行到最后,如下:
运行各个 SpringApplicationRunListener , 其中有一个是 org.springframework.boot.context.event.EventPublishingRunListener ,然后开启如下的调用,在这里会创建并发送 ApplicationReadyEvent 事件,表示Springboot上下文初始化完成。
主要介绍下第二部分关闭,都是通过spring依赖注入引入自定义的执行方法和线程池,因为这里线程池都是注册成 bean 的,可以放在一起统一管理。就不用每个地方去关闭;还有一个是部分功能 bean 实现了 Stopable 接口,用来完成扩展的关闭方式,可以理解成一个规范。
以上就是这篇的全部内容,感谢阅读。
Java语言包含三种核心机制:Java 虚拟机、垃圾收集机制和代码安全检测。1、Java 虚拟机(Java Virtual Machine,JVM)
在一台计算机上由软件或硬件模拟的计算机。Java虚拟机读取并处理经编译过的平台无关的字节码class文件。
2、垃圾收集机制(Garbage collection)
在C/C++ 等语言中,由程序员负责回收无用内存。Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。
3、代码安全性检测(Code Security)
Java执行代码的时候,由JVM对运行的代码进行安全性检测,当进行一些非法操作的时候,比如修改一些系统设置的时候,JVM会发出警告。