SmartLifecycle接口

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

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

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

话不多说先实现一个SmartLifeCycle

在这里插入图片描述
我们发现实现类需要实现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中的这个方法
在这里插入图片描述
boolean isRunning() 作为 信号来判定 start 还是stop
我们来启动一下springboot应用测试一下,下图说明 start在应用启动前执行了
在这里插入图片描述
然后我们写一个springmvc 接口来关闭应用,下面的关闭方法写的比较粗糙,当然有更高级的玩法。
在这里插入图片描述
我们调用 /life/destroy 方法 ,会出现下面的结果
在这里插入图片描述
转自::https://cloud.tencent.com/developer/article/1549150

Spring中,当使用@EnableCaching注解启用缓存功能时,可以通过实现SmartLifecycle接口来在@EnableCaching加载完成后执行某个方法。SmartLifecycle接口提供了在Spring应用程序生命周期中控制bean的启动和停止的能力。 您可以按照以下步骤来实现在@EnableCaching加载完成后执行某个方法: 1. 创建一个类并实现SmartLifecycle接口: ```java import org.springframework.context.SmartLifecycle; import org.springframework.stereotype.Component; @Component public class MyCachingLifecycle implements SmartLifecycle { private boolean isRunning = false; @Override public void start() { // 在这里执行您想要在@EnableCaching加载完成后执行的方法 System.out.println("MyCachingLifecycle start method called"); isRunning = true; } @Override public void stop() { // 在这里执行停止相关的逻辑(如果有需要) System.out.println("MyCachingLifecycle stop method called"); isRunning = false; } @Override public boolean isRunning() { return isRunning; } } ``` 2. 确保@EnableCaching注解被正确使用在配置类上: ```java import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; @Configuration @EnableCaching public class AppConfig { // 配置相关的bean和其他设置 } ``` 3. 当Spring启动时,您将会看到"MyCachingLifecycle start method called"被打印出来,表示在@EnableCaching加载完成后,MyCachingLifecycle中的start方法被调用。 请注意,以上代码中的示例仅用于演示目的,您可以根据实际需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值