当前位置:首页 > 科技  > 软件

SpringBoot这几个工具类太有用了

来源: 责编: 时间:2024-07-01 17:17:01 103观看
导读环境:SpringBoot3.2.51. 获取进程ID如果你想在程序中获取当前SpringBoot运行的进程号,那么你可以使用ApplicationPid,该类非常方便的获取当前进程ID。ApplicationPid pid = new ApplicationPid() ;System.out.printf("进

环境:SpringBoot3.2.5sLk28资讯网——每日最新资讯28at.com

1. 获取进程ID

如果你想在程序中获取当前SpringBoot运行的进程号,那么你可以使用ApplicationPid,该类非常方便的获取当前进程ID。sLk28资讯网——每日最新资讯28at.com

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

输出结果:sLk28资讯网——每日最新资讯28at.com

进程ID: 24416

当然你还可以通过如下方式,获取当前的进程号:sLk28资讯网——每日最新资讯28at.com

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

该监听器会将当前的进程ID写入文件中,通过如下配置文件路径sLk28资讯网——每日最新资讯28at.com

spring:  pid:    file: d:/app.pid

文件内容:sLk28资讯网——每日最新资讯28at.com

图片图片sLk28资讯网——每日最新资讯28at.com

如果你觉得无聊,那么你还可以通过如下方式:sLk28资讯网——每日最新资讯28at.com

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

这样也可以获取进程ID。sLk28资讯网——每日最新资讯28at.com

2. 应用运行主目录

ApplicationHome提供访问应用程序主目录的途径。尝试为Jar文件、解压缩文件和直接运行的应用程序选择一个合理的主目录。sLk28资讯网——每日最新资讯28at.com

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

在IDE中运行输出结果:sLk28资讯网——每日最新资讯28at.com

dir: D:/java/workspace/test-app, source: null

打成Jar后运行输出结果:sLk28资讯网——每日最新资讯28at.com

dir: D:/java/workspace/test-app/target,   source: D:/java/workspace/test-app/target/test-app-1.0.0.jar

通过jar运行后,source输出的是当前运行的jar包路径。sLk28资讯网——每日最新资讯28at.com

3. 获取Java版本

要想知道当前SpringBoot运行时的java版本可以通过JavaVersion获取:sLk28资讯网——每日最新资讯28at.com

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

输出结果:sLk28资讯网——每日最新资讯28at.com

Java Version: 17

JavaVersion是个枚举类,定义了17~22枚举值,你还可以调用isEqualOrNewerThan和isOlderThan进行java版本的比较。sLk28资讯网——每日最新资讯28at.com

4. 应用临时目录

ApplicationTemp类提供了访问应用程序特定的临时目录的功能。一般来说,不同的Spring Boot应用程序将得到不同的位置,但是,只需重新启动应用程序即可获得相同的位置。sLk28资讯网——每日最新资讯28at.com

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

输出结果:sLk28资讯网——每日最新资讯28at.com

临时目录: C:/Users/MSI-NB/AppData/Local/Temp/561929B2C764E67BCDA2DF9DAE26EF121F7E5365

不论你在IDE下还是Jar方式运行,windows平台下临时目录都在这里的Temp下。sLk28资讯网——每日最新资讯28at.com

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

当你需要访问系统属性时可以通过SystemProperties类非常方便的获取。如果你访问的属性不存在时(null),那么它会再从环境变量中获取(System#getenv)。sLk28资讯网——每日最新资讯28at.com

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

输出结果:sLk28资讯网——每日最新资讯28at.com

java.home=D:/software/jre

注:这里的get方法参数是可变长参数,你可以传递多个key,获取时遍历遇到不为null的直接返回。sLk28资讯网——每日最新资讯28at.com

6. 实例化对象

Instantiator通过注入可用参数来实例化对象的简单工厂。sLk28资讯网——每日最新资讯28at.com

public interface DAO {}public class A implements DAO {}  public class B implements DAO {}

注备上面几个类,接下通过Instantiator一次性实例化多个对象。sLk28资讯网——每日最新资讯28at.com

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) ;

输出结果sLk28资讯网——每日最新资讯28at.com

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

非常方便的一次性帮助你实例化多个同类型的类。sLk28资讯网——每日最新资讯28at.com

7. 资源加载

如果你想将后缀为.properties,.xml,.yaml资源文件加载,那么你可以使用PropertiesPropertySourceLoader与YamlPropertySourceLoader。sLk28资讯网——每日最新资讯28at.com

// 加载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<PropertySource>还可以注册到Environment中,在系统中直接访问。sLk28资讯网——每日最新资讯28at.com

8. 获取basePackages

如果你需要在代码中获取当前应用启动类所在的基包basePackages,那么你可以通过如下方式:sLk28资讯网——每日最新资讯28at.com

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

输出结果:sLk28资讯网——每日最新资讯28at.com

basepPckages: [com.pack]

内部注册的是一个BasePackages Bean,该类是静态私有的所以你没法直接访问,只能通过上面的方式。sLk28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-97906-0.htmlSpringBoot这几个工具类太有用了

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何动态匹配 Tokio 派生线程?你知道吗?

下一篇: TypeScript 组件开发中的常见问题

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • JavaScript 混淆及反混淆代码工具

    JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 服务存储设计模式:Cache-Aside模式

    服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 品牌洞察丨服务本地,美团直播成效几何?

    品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top
Baidu
map