SpringBooot常用的内置工具类

news/2024/12/22 17:35:52/

环境:SpringBoot 3.2.5

1、获取进程ID

如果你想在程序中获取当前SpringBoot运行的进程号,那么你可以使用ApplicationPid,该类非常方便的获取当前进程ID。

java">ApplicationPid pid = new ApplicationPid() ;
System.out.printf("进程ID: %s%n", pid.toString()) ;

输出结果

java">进程ID: 24416

当然你还可以通过如下方式,获取当前的进程号

java">#在META-INF/spring.factories中注册监听器
org.springframework.context.ApplicationListener=\
org.springframework.boot.context.ApplicationPidFileWriter

该监听器会将当前的进程ID写入文件中,通过如下配置文件路径

java">spring:pid:file: d:/app.pid

如果你觉得无聊,那么你还可以通过如下方式

java">String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]

这样也可以获取进程ID。

2、.应用运行主目录

ApplicationHome提供访问应用程序主目录的途径。尝试为Jar文件、解压缩文件和直接运行的应用程序选择一个合理的主目录。

java">ApplicationHome home = new ApplicationHome() ;
System.out.printf("dir: %s, source: %s%n", home.getDir(), home.getSource()) ;

在IDE中运行输出结果

java">dir: D:\java\workspace\test-app, source: null

打成Jar后运行输出结果

java">dir: D:\java\workspace\test-app\target, source: D:\java\workspace\test-app\target\test-app-1.0.0.jar

通过jar运行后,source输出的是当前运行的jar包路径。

3、获取Java版本

要想知道当前SpringBoot运行时的java版本可以通过JavaVersion获取

java">System.out.printf("Java Version: %s%n", JavaVersion.getJavaVersion()) ;

输出结果

java">Java Version: 17

JavaVersion是个枚举类,定义了17~22枚举值,你还可以调用isEqualOrNewerThan和isOlderThan进行java版本的比较。

4、引用临时目录

ApplicationTemp类提供了访问应用程序特定的临时目录的功能。一般来说,不同的Spring Boot应用程序将得到不同的位置,但是,只需重新启动应用程序即可获得相同的位置。

java">ApplicationTemp temp = new ApplicationTemp() ;
System.out.printf("临时目录: %s%n", temp.getDir()) ;

输出结果

java">临时目录: C:\Users\MSI-NB\AppData\Local\Temp\561929B2C764E67BCDA2DF9DAE26EF121F7E5365

不论你在IDE下还是Jar方式运行,windows平台下临时目录都在这里的Temp下

5、系统属性/环境变量访问

当你需要访问系统属性时可以通过SystemProperties类非常方便的获取。如果你访问的属性不存在时(null),那么它会再从环境变量中获取(System#getenv)

java">System.out.printf("java.home=%s%n", SystemProperties.get("java.home")) ;

输出结果

java">java.home=D:\software\jre

注:这里的get方法参数是可变长参数,你可以传递多个key,获取时遍历遇到不为null的直接返回。

6、实例化对象

Instantiator通过注入可用参数来实例化对象的简单工厂。

java">public interface DAO {}
public class A implements DAO {}  
public class B implements DAO {}

注备上面几个类,接下通过Instantiator一次性实例化多个对象。

java">Instantiator<DAO> instant = new Instantiator<>(DAO.class, p -> {}) ;
List<DAO> ret = instant.instantiate(List.of("com.pack.A", "com.pack.B")) ;
System.out.printf("%s%n", ret) ;

输出结果

java">[com.pack.A@3127cb44, com.pack.B@3234474]

非常方便的一次性帮助你实例化多个同类型的类

7、资源加载

如果你想将后缀为.properties,.xml,.yaml资源文件加载,那么你可以使用PropertiesPropertySourceLoader与YamlPropertySourceLoader。

java">// 加载properties文件
PropertiesPropertySourceLoader propertyLoader = new PropertiesPropertySourceLoader() ;
List<PropertySource<?>> list = propertyLoader.load("pack", new ClassPathResource("pack.properties")) ;
System.out.printf("pack.*: %s%n", list.get(0).getSource()) ;
// 加载yaml文件
YamlPropertySourceLoader yamlLoader = new YamlPropertySourceLoader() ;
List<PropertySource<?>> yamls = yamlLoader.load("pack", new ClassPathResource("pack.yml")) ;
System.out.printf("pack.*: %s%n", yamls.get(0).getSource()) ;

通过上面2个Loader非常方便的将资源文件加载,加载后的List还可以注册到Environment中,在系统中直接访问。

8、获取basePackages

如果你需要在代码中获取当前应用启动类所在的基包basePackages,那么你可以通过如下方式

java">private ConfigurableApplicationContext context ;
System.out.printf("basepPckages: %s%n", AutoConfigurationPackages.get(context)) ;

输出结果

java">basepPckages: [com.pack]

内部注册的是一个BasePackages Bean,该类是静态私有的所以你没法直接访问,只能通过上面的方式。

文章来源:Spring全家桶实战案例源码


http://www.ppmy.cn/news/1472586.html

相关文章

Vue.js的V-show什么意思

在 Vue.js 中&#xff0c;v-show 是一个指令&#xff0c;它用于根据条件切换元素的 CSS 属性 display。具体来说&#xff0c;当 v-show 的条件为 true 时&#xff0c;元素会被设置为 display: block&#xff08;或其他相关的值&#xff0c;比如 inline、inline-block 等&#x…

“一带一路”再奏强音!秘鲁总统博鲁阿尔特参访苏州金龙

6月27日下午&#xff0c;首次访华的秘鲁共和国总统博鲁阿尔特一行到苏州金龙参观访问&#xff0c;受到了苏州金龙总经理黄书平的热情接待。 黄书平&#xff08;左二&#xff09;向博鲁阿尔特&#xff08;右一&#xff09;介绍苏州金龙发展情况 从苏州金龙发展历程、产品技术研…

操作系统精选题(三)(简答题、概念题)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;操作系统 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 简答题 一、对 CPU、内存、外设并…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本&#xff0c;您需要遵循以下步骤。请注意&#xff0c;这些步骤可能需要一些系统管理经验&#xff0c;因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先&#xff0c;确保您的系统软件包是最新的。使用以下命令更新所有软…

Qt的事件循环机制源码分析

Qt 使用了一个事件模型来与操作系统沟通&#xff0c;处理诸如鼠标点击、键盘输入等用户动作。以下步骤详细解释了从操作系统捕捉鼠标点击事件到 Qt 处理该事件的过程&#xff1a; 1、事件处理过程 1.1、Qt 的事件循环 Qt 应用程序运行时会启动一个事件循环&#xff08;QEven…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境&#xff0c;用于在docker 中运行算法服务 系统配置 …

【华为OD机试B卷】解压报文、压缩报文还原(C++/Java/Python)

题目 题目描述 为了提升数据传输的效率,会对传输的报文进行压缩处理。输入一个压缩后的报文,请返回它解压后的原始报文。压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。输入描述 输…

ESP32-C3(基本信息)

ESP32-C3 是一款低功耗、高集成度的 MCU 系统级芯片 (SoC)&#xff0c;它集成了 2.4 GHz Wi-Fi 和低功耗蓝牙 (Bluetooth LE) 无线通信功能&#xff0c;并拥有丰富的外设接口和先进的电源管理机制。 主要特性&#xff1a; 无线通信&#xff1a; 支持 2.4 GHz Wi-Fi (802.11b/…