spring的钩子_高级java开发必须掌握的Spring接口——SmartLifecycle

91e85a3117ae4c7681ebc8f1b9197f1b.png

有些场景我们需要在Spring 所有的bean 完成初始化后紧接着执行一些任务或者启动需要的异步服务。 常见有几种解决方案

  • j2ee 注解 启动前@PostConstruct 销毁前@PreDestroy 基于j2ee 规范
  • springboot 的 org.springframework.boot.CommandLineRunner springboot 特性前面我已经介绍过了
  • spring org.springframework.context.SmartLifecycle

这里介绍一下第三种 SmartLifecycle

SmartLifecycle 不仅仅能在初始化后执行一个逻辑,还能再关闭前执行一个逻辑,比如你一个服务在启动时向服务注册发现中心发一个信号告诉它服务上线了,下线前通知它你下线了。也就是实现了一个 从生到死 的轮回。

话不多说先实现一个SmartLifeCycle

4cffaf04b795f5dac5e4fde940a8e3a0.png

我们发现实现类需要实现3个方法,但是这3个方法并不是SmartLifecycle的方法而是

 org.springframework.context.Lifecycle

的方法:

  • void start() 我们主要在该方法中启动任务或者其他异步服务,比如开启MQ接收消息当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期 处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值。如果为“true”,则该方法会被调用,而不是等待显式调用自己的start()方法,同时当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值, 如果为true,则该方法会被调用,而不是等待显式调用自己的start()方法,boolean isRunning() 的状态信号也决定此方法是否执行只有当该方法返回false start()方法才会被执行,有兴趣可以看LifecycleProcessor相关实现
  • void stop() 顾名思义 生命周期结束时调用的方法。只有当 boolean isRunning() 方法返回true 该方法才会被执行,该方法是属于Lifecyle接口的,被SmartLifeCycle作为了一个钩子 实际执行的是SmartLifeCycle中的这个方法
374f27ee59da529b18946cf1bb776770.png
  • boolean isRunning() 作为 信号来判定 start 还是stop

我们来启动一下springboot应用测试一下,下图说明 start在应用启动前执行了

7fafe3ad0d6d59d2d90a8889daed8dc6.png

然后我们写一个springmvc 接口来关闭应用,下面的关闭方法写的比较粗糙,当然有更高级的玩法。

67b3b6ae281747bda35123935b5a691a.png

我们调用 /life/destroy 方法 ,会出现下面的结果

27b6a14307709d9579e304bf912924b5.png

这里介绍它的一些使用方法和场景,先学会使用,更深层次的留给你自己去挖掘。

我是码农小胖哥,关注我的头条或者公众号,天天有干货。有问题可以留言或者私信,觉得写的不错可以点个赞,转发一下。

bd470087b16116b89e15ec5855808474.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java:对Java SE 6和Java SE 7的客户端和桌面部分的改进!

Java 6和Java 7中的客户端改进 了解有关Java SE 6和Java SE 7的客户端和桌面部分的改进,包括新的applet插件,Java Deployment Toolkit,成形和半透明的窗口,重量级-轻量级混合以及Java Web Start。 介绍 自2006年12月发布Java平台…

辨异 —— 行星 vs 恒星

star:恒星,planet:行星;1. 恒星 恒星是指宇宙中靠核聚变产生的能量而自身能发热发光的星体(比如太阳)。过去天文学家以为恒星的位置是永恒不变的,以此为名。但事实上,恒星也会按照一…

软件公司职责分配

岗位:项目经理 主要职责:1、 计划:a)项目范围、项目质量、项目时间、项目成本的确认。b)项目过程/活动的标准化、规范化。c)根据项目范围、质量、时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划。d)各项计划得到上级领…

大型网站架构系列:负载均衡详解(4)

本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法。具体参考文章,详见最后的链接。 三、LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于19…

关于JavaFX的最常见问题

上周,我在斯德哥尔摩的Jfokus 2012上做了一个关于JavaFX的演讲,当时我意识到每次活动都会问三个问题。 似乎有一个普遍的兴趣,所以我尝试在这篇文章中回答他们(尽可能的说实话): iPad或其他移动设备上的Jav…

python中面向对象空间时间_python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)...

一、类先看一段代码:classPerson:animal 高级动物walk_way 直立行走 # 静态属性,静态变量,静态字段language 语言def __init__(self,name,age,work): # 函数 动态属性,方法#print(self)self.name nameself.ageageself.workworkdef…

Linux GRUB 引导Win 7 ---- error: invalid EFI file path

最近新买了个固态硬盘,先装了个Win 7系统,现在装的系统和以前装系统唯一的区别是引导不是以前的MBR,而是最新看似是个趋势的GPTUEFI方式。 win 7 装完啦,还是和以往的一样装 Ubantu (Ubantu 12.04),ubantu 引导磁盘扇…

其他位不变,具体位的赋值操作

GPIOC (GPIOC & 0xf0) | (Content[s_Index] & 0x0f);        //低四位赋值GPIOB (GPIOB & 0xc3) | ((Content[s_Index]>>2) & 0x3c);     //中间四位赋值 具体某一位置1或取反&#xff1a; 正确写法&#xff1a; 置1:GPIOC | (1<<i…

使用Spring AOP实现活动记录模式

在班级设计中&#xff0c;我们应就每个班级的职责分配做出决定。 如果我们选择的不错&#xff0c;系统将更易于理解&#xff0c;维护和扩展。 几乎我们所有的项目都有一个持久层&#xff0c;即关系数据库&#xff0c;文档存储或仅XML文件。 通常&#xff0c;您将使用DAO模式在业…

Java基础之反射

框架都要用到反射技术&#xff0c;反射都要用到一个类Class. java程序中的各个java类属于同一类事物&#xff0c;描述这类事物的java类名就是Class. 得到字节码的方式有三种&#xff1a; Date.class;new Date().getClass();Class.forName("java.lang.String");最后一…

php socketconnect连接失败_PHP设计模式之模板方法模式

模板方法模式&#xff0c;也是我们经常会在不经意间有会用到的模式之一。这个模式是对继承的最好诠释。当子类中有重复的动作时&#xff0c;将他们提取出来&#xff0c;放在父类中进行统一的处理&#xff0c;这就是模板方法模式的最简单通俗的解释。就像我们平时做项目&#xf…

linux系统硬件配置查看方法

一&#xff1a;查看cpu more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如果觉得需要看的更加舒服 grep "model name" /proc/cpuinfo | cut -f2 -d: 二&#xff1a;查看内存 grep MemTotal /proc/meminfo grep MemT…

java String源码学习

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/**char数组用于字符的存储 */private final char value[];/** 缓存string的hash码 */private int hash; // Default to 0public String() {/**无参构造函数,打印值为&quo…

JBoss AS 7.1.0.Final“ Thunder”发布-Java EE 6 Full Profile认证!

在JBoss AS7上进行了大约一年的开发后&#xff0c;我们现已发布7.1.0.Final“ Thunder” &#xff01; 可从此处的通常位置下载该文件。 对于JBoss AS7团队来说&#xff0c;这是一个非常大的成就&#xff0c;我们为此版本感到非常自豪。 这个版本包含了7.1.0.CR1b的许多错误修复…

数据库建表练习(10.11作业)

转载于:https://www.cnblogs.com/HRZJ/p/5951897.html

天干地支计算公式_天干地支主怎样计算?

回答&#xff1a;少女时代级别&#xff1a;硕士研究生2009-01-08 20:34:04来自&#xff1a;贵州省贵阳市我国古代是用天干地支来纪年的&#xff0c;现代社会已很少使用。一来现今社会已经离不开国际化&#xff0c;沿用老的历法已经不现实&#xff1b;二来天干地支在民间多用于算…

从程序员到CTO的Java技术路线图

时间:2013-05-29 17:39来源:www.chengxuyuans.com在技术方面无论我们怎么学习&#xff0c;总感觉需要提升自已不知道自己处于什么水平了。但如果有清晰的指示图供参考还是非常不错的&#xff0c;这样我们清楚的知道我们大概处于那个阶段和水平。 Java程序员 高级特性 反射、泛型…

Linux的网卡相关

检测linux下网卡是否正常 1.dmesg | grep eth 如果出现以下 eth0: link up 说明是网卡正常的 eth0: registered as PCnet/PCI II 79C970Aeth0: link upeth0: no IPv6 routers present 2.如果所用网卡是pcI总线的 。用命令&#xff1a;lspci 能看到网卡是存在的。 3.用ethtool…

设置Spring 3开发环境

本教程简要说明了如何设置典型的环境来开发基于Spring的应用程序。 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外&#xff0c;本教程没有其他先决条件。 在教程中&#xff0c;我们将需要安装以下组件&#xff1a; Java 6 JDK更新26 用于Java EE开发人员的Ecl…

3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息

跟踪标记&#xff1a;1204/1222 功能及用途&#xff1a; 捕获SQL Server死锁信息&#xff0c;并自动存放到错误日志(ERRORLOG)中。 举例&#xff1a; USE tempdb GO CREATE TABLE t1(id int) INSERT t1 SELECT 1CREATE TABLE t2(id int) INSERT t2 SELECT 1 GO --开启1204/1222…