自定义springboot的生命周期函数在项目启动完成后去取配置文件中的值

主要是实现smartLifecycle类

package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;@Component
public class MyShutdownHook  implements SmartLifecycle {@Autowiredprivate ApplicationContext applicationContext;private boolean isRunning = false;/*** 1. 我们主要在该方法中启动任务或者其他异步服务,比如开启MQ接收消息<br/>* 2. 当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值。* 如果为“true”,则该方法会被调用,而不是等待显式调用自己的start()方法。*/@Overridepublic void start() {System.out.println("start");
// 获取配置文件中的值String configValue =applicationContext.getEnvironment().getProperty("name");System.err.println("开始了完美的一天"+configValue);// 执行完其他业务后,可以修改 isRunning = trueisRunning = true;}/*** 如果工程中有多个实现接口SmartLifecycle的类,则这些类的start的执行顺序按getPhase方法返回值从小到大执行。<br/>* 例如:1比2先执行,-1比0先执行。 stop方法的执行顺序则相反,getPhase返回值较大类的stop方法先被调用,小的后被调用。*/@Overridepublic int getPhase() {// 默认为0return 0;}/*** 根据该方法的返回值决定是否执行start方法。<br/> * 返回true时start方法会被自动执行,返回false则不会。*/@Overridepublic boolean isAutoStartup() {// 默认为falsereturn true;}/*** 1. 只有该方法返回false时,start方法才会被执行。<br/>* 2. 只有该方法返回true时,stop(Runnable callback)或stop()方法才会被执行。*/@Overridepublic boolean isRunning() {// 默认返回falsereturn isRunning;}/*** SmartLifecycle子类的才有的方法,当isRunning方法返回true时,该方法才会被调用。*/@Overridepublic void stop(Runnable callback) {System.out.println("stop(Runnable)");// 如果你让isRunning返回true,需要执行stop这个方法,那么就不要忘记调用callback.run()。// 否则在你程序退出时,Spring的DefaultLifecycleProcessor会认为你这个TestSmartLifecycle没有stop完成,程序会一直卡着结束不了,等待一定时间(默认超时时间30秒)后才会自动结束。// PS:如果你想修改这个默认超时时间,可以按下面思路做,当然下面代码是springmvc配置文件形式的参考,在SpringBoot中自然不是配置xml来完成,这里只是提供一种思路。// <bean id="lifecycleProcessor" class="org.springframework.context.support.DefaultLifecycleProcessor">//      <!-- timeout value in milliseconds -->//      <property name="timeoutPerShutdownPhase" value="10000"/>// </bean>callback.run();isRunning = false;}/*** 接口Lifecycle的子类的方法,只有非SmartLifecycle的子类才会执行该方法。<br/>* 1. 该方法只对直接实现接口Lifecycle的类才起作用,对实现SmartLifecycle接口的类无效。<br/>* 2. 方法stop()和方法stop(Runnable callback)的区别只在于,后者是SmartLifecycle子类的专属。*/@Overridepublic void stop() {System.out.println("stop");isRunning = false;}
}

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

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

相关文章

MYSQL索引使用注意事项

索引使用注意事项&#xff1a; 1.索引列运算 不要在索引列上进行运算操作&#xff0c;否则索引将失效&#xff1b; 2.字符串不加引号 字符串类型使用时&#xff0c;不加引号&#xff0c;否则索引将失效&#xff1b; 3.模糊查询 如果仅仅是尾部模糊匹配&#xff0c;索引将不会失…

防火墙暴露端口

如果你想开通防火墙上的端口&#xff0c;具体的操作方式可能会取决于你所使用的操作系统。以下是一些常见操作系统的步骤&#xff1a; 1. Linux&#xff08;例如&#xff0c;Ubuntu 或 CentOS&#xff09;: 使用 ufw&#xff08;适用于 Ubuntu&#xff09;&#xff1a; # 开…

RK平台查看板子上的dts信息

简介 dts文件描述了硬件每个模块的信息&#xff0c;我们嵌入式软件的调试很多时候都是在改dts文件&#xff0c;有时候我们不确定板子上的固件是否已经更新了我们的修改&#xff0c;这时候我们可以直接读取板子上的dts信息&#xff0c;下面来演示一下。 进入uboot命令行模式 …

关于软raid的实现及常见问题

RAID概念 磁盘阵列&#xff08;Redundant Arrays of Independent Disks&#xff0c;RAID&#xff09;&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘&#xff0c;以硬件&#xff08;RAID卡&#xff09;或软件&#xff08;MDADM&…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

sql调优

慢查询 SQL 治理方案 一、SQL 性能下降的原因 在对 SQL 进行分析之前&#xff0c;需要明确可能导致 SQL 执行性能下降的原因进行分析&#xff0c;执行性能下降可以体现在很多方面&#xff1a; 查询语句写的烂索引没加好表数据过大数据库连接数不够查询的数据量过大被其他慢s…

MyBatisPlus代码生成

基础依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

visual studio 如何建立 C 语言项目

安装这个 模块。 新建 空项目 创建完成 写demo 点击运行&#xff1a;

【1day】泛微e-office OA系统user_page接口未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

Web项目从Tomcat迁移到TongWeb

注意事项 1. 使用JNDI方式获取数据源&#xff1a; ①在TongWeb创建JDBC连接池; ②修改Web项目数据源配置. #spring.datasource.urljdbc:mysql://127.0.0.1:3306/demo #spring.datasource.usernametest #spring.datasource.passwordspring.datasource.jndi-namedemo2. 修…

Spring cloud - Hystrix源码

其实只是Hystrix初始化部分&#xff0c;我们从源码的角度分析一下EnableCircuitBreaker以及HystrixCommand注解的初始化过程。 从EnableCircuitBreaker入手 我们是通过在启动类添加EnableCircuitBreaker注解启用Hystrix的&#xff0c;所以&#xff0c;源码解析也要从这个注解…

最新PHP熊猫头图片表情斗图生成源码

这是一款能生成熊猫头表情斗图的自适应系统源码&#xff0c;无论是在电脑还是手机上都可以正常使用&#xff01;这个源码集成了搜狗搜索图片接口&#xff0c;可以轻松地一键搜索数百万张图片&#xff0c;并且还包含了表情制作等功能模块。对于一些新站来说&#xff0c;这是一个…

Cloud微服务

当我们谈论“云微服务”时&#xff0c;通常是指基于云计算和微服务架构的应用程序开发和部署模型。以下是关于云微服务的一些详细信息&#xff1a; 微服务架构&#xff1a; 微服务架构是一种软件设计和开发模式&#xff0c;将应用程序划分为一组小型、独立的服务单元。每个服…

c++ LRU(最近最少使用)缓存机制

// LRU(最近最少使用)缓存机制 #ifndef _ZD_LRU_CACHE_H_ #define _ZD_LRU_CACHE_H_#include <unordered_map> #include <list> #include <mutex>class ZDLRUCahce { public:ZDLRUCahce(int capacity): m_capacity(capacity){}~ZDLRUCahce(){}// 1.key不存在…

JavaScript的过滤大师:深度解析Filter用法

JavaScript的过滤大师&#xff1a;深度解析Filter用法 前言基础篇filter的基本用法语法示例 自定义过滤函数数组对象的过滤复杂条件的筛选常见应用场景性能优化注意性能的建议在大规模数据集下的优化方法 案例分析实际案例&#xff1a;用户筛选使用 filter 方法解决问题代码优化…

产品工程师工作的职责十篇(合集)

一、岗位职责的作用意义 1.可以最大限度地实现劳动用工的科学配置; 2.有效地防止因职务重叠而发生的工作扯皮现象; 3.提高内部竞争活力&#xff0c;更好地发现和使用人才; 4.组织考核的依据; 5.提高工作效率和工作质量; 6.规范操作行为; 7.减少违章行为和违章事故的发生…