SpringBoot+Redis获取电脑信息

获取电脑信息

测试

System.getProperties();

System: 是Java中的一个内置类,用于提供与系统相关的功能和信息。这个类中包含了一些静态方法和常量,可以让您方便地访问和操作系统级别的资源。

getProperties(): 是一个静态方法,它返回一个表示当前系统属性的Properties对象。这个方法可以用于获取系统相关的属性和信息,例如系统的操作系统、Java版本、路径分隔符等。、

package com.sin;import com.sun.management.OperatingSystemMXBean;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.util.Properties;@SpringBootTest
class GetComputerMessages {Properties props = System.getProperties();OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();/*** 获取Java信息*/@Testpublic void javaMessage() {System.out.println("Java的运行环境版本:" + props.getProperty("java.version"));System.out.println("Java的运行环境供应商:" + props.getProperty("java.vendor"));System.out.println("Java的运行环境供应商URL:" + props.getProperty("java.vendor.url"));System.out.println("Java的安装路径:" + props.getProperty("java.home"));System.out.println("Java的虚拟机规范名称:" + props.getProperty("java.vm.specification.name"));System.out.println("Java的虚拟机实现版本:" + props.getProperty("java.vm.version"));System.out.println("Java的虚拟机实现供应商:" + props.getProperty("java.vm.vendor"));System.out.println("Java的虚拟机实现名称:" + props.getProperty("java.vm.name"));System.out.println("Java的类格式版本号:" + props.getProperty("java.class.version"));System.out.println("Java的类路径:" + props.getProperty("java.class.path"));System.out.println("加载库时搜索的路径列表:" + props.getProperty("java.library.path"));System.out.println("默认的临时文件路径:" + props.getProperty("java.io.tmpdir"));System.out.println("一个或多个扩展目录的路径:" + props.getProperty("java.ext.dirs"));System.out.println("操作系统的名称:" + props.getProperty("os.name"));System.out.println("操作系统的构架:" + props.getProperty("os.arch"));System.out.println("操作系统的版本:" + props.getProperty("os.version"));System.out.println("分件分隔符:" + props.getProperty("file.separator"));// 在 unix 系统中是"/"System.out.println("路径分隔符:" + props.getProperty("path.separator"));// 在 unix 系统中是":"System.out.println("行分隔符:" + props.getProperty("line.separator"));// 在 unix 系统中是"/n"System.out.println("用户的账户名称:" + props.getProperty("user.name"));System.out.println("用户的主目录:" + props.getProperty("user.home"));System.out.println("用户的当前工作主目录:" + props.getProperty("user.dir"));}/*** 获取jvm信息*/@Testpublic void jvmMessage() {// 获取java虚拟机信息Runtime runtime = Runtime.getRuntime();long totalMemoryBytes = runtime.totalMemory(); // JVM的总内存(字节)long freeMemoryBytes = runtime.freeMemory(); // JVM的空闲内存(字节)long maxMemoryBytes = runtime.maxMemory(); // JVM的最大可用内存(字节)long totalMemoryMB = totalMemoryBytes / (1024 * 1024); // 转换为兆字节long freeMemoryMB = freeMemoryBytes / (1024 * 1024); // 转换为兆字节long maxMemoryMB = maxMemoryBytes / (1024 * 1024); // 转换为兆字节System.out.println("JVM的总内存:" + totalMemoryMB + "MB");System.out.println("JVM的空闲内存:" + freeMemoryMB + "MB");System.out.println("JVM的最大可用内存:" + maxMemoryMB + "MB");}/*** 获取cpu信息*/@Testpublic void cpuMessage() {String cpuArch = System.getProperty("os.arch"); // CPU架构int cpuCores = Runtime.getRuntime().availableProcessors(); // CPU核心数String cpuName = System.getenv("PROCESSOR_IDENTIFIER"); // CPU名称System.out.println("CPU架构:" + cpuArch);System.out.println("CPU名称:" + cpuName);System.out.println("CPU核心数:" + cpuCores);double systemLoadAverage = osBean.getSystemLoadAverage(); // 系统平均负载double processCpuLoad = osBean.getProcessCpuLoad(); // 当前进程的CPU负载double systemCpuLoad = osBean.getSystemCpuLoad(); // 系统的CPU负载System.out.println("系统平均负载:" + systemLoadAverage);System.out.println("当前进程的CPU负载:" + processCpuLoad);System.out.println("系统的cpu负载:" + systemCpuLoad);double userCpuLoad = osBean.getProcessCpuTime() / 1000000.0; // 用户态CPU时间double systemCpuTime = osBean.getSystemCpuLoad() * osBean.getAvailableProcessors(); // 系统态CPU时间double idleCpuTime = (1 - osBean.getSystemCpuLoad()) * osBean.getAvailableProcessors(); // 空闲CPU时间System.out.println("用户使用率:" + userCpuLoad);System.out.println("系统使用率:" + systemCpuTime);System.out.println("当前空闲率:" + idleCpuTime);}/*** 内存信息*/@Testpublic void memoryMessage() {// 获取内存long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize(); // 物理内存总量long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲物理内存量long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize(); // 交换空间总量long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize(); // 空闲交换空间量System.out.println("物理内存总量:" + totalPhysicalMemorySize / (1024 * 1024) + " MB");System.out.println("空闲物理内存量:" + freePhysicalMemorySize / (1024 * 1024) + " MB");System.out.println("交换空间总量:" + totalSwapSpaceSize / (1024 * 1024) + " MB");System.out.println("空闲交换空间量:" + freeSwapSpaceSize / (1024 * 1024) + " MB");long totalMemorySize = osBean.getTotalPhysicalMemorySize(); // 总内存大小long freeMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲内存大小long usedMemorySize = totalMemorySize - freeMemorySize; // 已用内存大小double memoryUsage = (double) usedMemorySize / totalMemorySize * 100; // 内存使用率System.out.println("总内存:" + formatMemorySize(totalMemorySize));System.out.println("已用内存:" + formatMemorySize(usedMemorySize));System.out.println("剩余内存:" + formatMemorySize(freeMemorySize));System.out.println("内存使用率:" + String.format("%.2f", memoryUsage) + "%");}/*** 获取磁盘信息*/@Testpublic void diskMessage() {File[] roots = File.listRoots();for (File root : roots) {String path = root.getAbsolutePath();long totalSpace = root.getTotalSpace(); // 总容量long usableSpace = root.getUsableSpace(); // 可用容量double usage = (double) (totalSpace - usableSpace) / totalSpace * 100; // 使用率System.out.println("磁盘路径:" + path);System.out.println("总容量:" + formatMemorySize(totalSpace));System.out.println("可用容量:" + formatMemorySize(usableSpace));System.out.println("使用率:" + String.format("%.2f", usage) + "%");try {FileStore store = Files.getFileStore(root.toPath());String fsType = store.type();String fsName = store.name();System.out.println("文件系统类型:" + fsType);System.out.println("文件系统名称:" + fsName);} catch (IOException e) {e.printStackTrace();}System.out.println();}}/*** 格式化容量大小** @param bytes* @return*/private static String formatMemorySize(long bytes) {double kiloBytes = bytes / 1024.0; // 将字节数转换为千字节double megaBytes = kiloBytes / 1024.0; // 将千字节转换为兆字节double gigaBytes = megaBytes / 1024.0; // 将兆字节转换为千兆字节if (gigaBytes >= 1) { // 如果容量大于等于1GBreturn String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位} else if (megaBytes >= 1) { // 如果容量大于等于1MBreturn String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位} else if (kiloBytes >= 1) { // 如果容量大于等于1KBreturn String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位} else { // 如果容量小于1KBreturn String.format("%d B", bytes); // 格式化输出字节数}}
}

java信息

在这里插入图片描述

内存信息

在这里插入图片描述

磁盘信息

在这里插入图片描述

jvm信息

在这里插入图片描述

CPU信息

在这里插入图片描述

整合Redis进行存储信息

package com.sin.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.sin.utils.RedisUtil;
import com.sun.management.OperatingSystemMXBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;/*** @createTime 2023/11/30 11:52* @createAuthor SIN* @use*/
@RestController
public class RedisTestController {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate RedisUtil redisUtil;Properties properties = System.getProperties();OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();/*** java信息* @return*/@PostMapping("/setJavaMessage")public String setJavaMessage(){Map<String,Object>  javaPropertiesMap = new HashMap<String,Object>();javaPropertiesMap.put("Java版本:" , properties.getProperty("java.version"));javaPropertiesMap.put("Java安装日期:" , properties.getProperty("java.version.date"));javaPropertiesMap.put("Java运行环境提供商:" , properties.getProperty("java.vendor"));javaPropertiesMap.put("Java安装路径:" , properties.getProperty("java.home"));javaPropertiesMap.put("Java虚拟机规范名称:" , properties.getProperty("java.vm.specification.name"));javaPropertiesMap.put("Java虚拟机版本:" , properties.getProperty("java.vm.version"));javaPropertiesMap.put("Java虚拟机提供商" , properties.getProperty("java.vm.vendor"));javaPropertiesMap.put("Java虚拟机实现名称" , properties.getProperty("java.vm.name"));javaPropertiesMap.put("Java类的格式版本号" , properties.getProperty("java.class.version"));javaPropertiesMap.put("Java类路径" , properties.getProperty("java.class.path"));javaPropertiesMap.put("加载库时搜索的路径列表:" , properties.getProperty("java.library.path"));javaPropertiesMap.put("默认的临时文件路径:" , properties.getProperty("java.io.tmpdir"));javaPropertiesMap.put("操作系统的名称:" , properties.getProperty("os.name"));javaPropertiesMap.put("操作系统的架构" , properties.getProperty("os.arch"));javaPropertiesMap.put("操作系统的版本" , properties.getProperty("os.version"));javaPropertiesMap.put("文件分隔符:" , properties.getProperty("file.separator"));// unix文件分割符 "/"javaPropertiesMap.put("路径分隔符:" , properties.getProperty("path.separator"));// unix系统分隔符 ":"javaPropertiesMap.put("行分隔符" , properties.getProperty("line.separator"));    // unix系统 "/n"javaPropertiesMap.put("用户的账户名称:" , properties.getProperty("user.name"));javaPropertiesMap.put("用户的主目录:" , properties.getProperty("user.home"));javaPropertiesMap.put("用户当前工作主目录:" , properties.getProperty("user.dir"));/*** java_message : hash姓名* javaPropertiesMap : hash键值对* 60 : 该数据存活60秒*/redisUtil.hmset("java_message",javaPropertiesMap,60);return "set success";}/*** jvm信息* @return*/@PostMapping("/setJVMMessage")public String setJVMMMessage(){Map<String,Object>  jvmPropertiesMap = new HashMap<String,Object>();Runtime runtime = Runtime.getRuntime();long totalMemoryBytes = runtime.totalMemory(); // JVM的总内存(字节)long freeMemoryBytes = runtime.freeMemory(); // JVM的空闲内存(字节)long maxMemoryBytes = runtime.maxMemory(); // JVM的最大可用内存(字节)long totalMemoryMB = totalMemoryBytes / (1024 * 1024); // 转换为兆字节long freeMemoryMB = freeMemoryBytes / (1024 * 1024); // 转换为兆字节long maxMemoryMB = maxMemoryBytes / (1024 * 1024); // 转换为兆字节jvmPropertiesMap.put("JVM的总内存:", totalMemoryMB + "MB");jvmPropertiesMap.put("JVM的空闲内存:" , freeMemoryMB + "MB");jvmPropertiesMap.put("JVM的最大可用内存:" , maxMemoryMB + "MB");/*** java_message : hash姓名* javaPropertiesMap : hash键值对* 60 : 该数据存活60秒*/redisUtil.hmset("jvm_message",jvmPropertiesMap,60);return "set success";}/*** cpu信息* @return*/@PostMapping("/cpuMessage")public String cpuMessage(){Map<String,Object>  cpuPropertiesMap = new HashMap<String,Object>();String cpuArch = System.getProperty("os.arch"); // CPU架构int cpuCores = Runtime.getRuntime().availableProcessors(); // CPU核心数String cpuName = System.getenv("PROCESSOR_IDENTIFIER"); // CPU名称cpuPropertiesMap.put("CPU架构:" , cpuArch);cpuPropertiesMap.put("CPU名称:" , cpuName);cpuPropertiesMap.put("CPU核心数:" , cpuCores);double systemLoadAverage = osBean.getSystemLoadAverage(); // 系统平均负载double processCpuLoad = osBean.getProcessCpuLoad(); // 当前进程的CPU负载double systemCpuLoad = osBean.getSystemCpuLoad(); // 系统的CPU负载cpuPropertiesMap.put("系统平均负载:" ,systemLoadAverage);cpuPropertiesMap.put("当前进程的CPU负载:" , processCpuLoad);cpuPropertiesMap.put("系统的cpu负载:" , systemCpuLoad);double userCpuLoad = osBean.getProcessCpuTime() / 1000000.0; // 用户态CPU时间double systemCpuTime = osBean.getSystemCpuLoad() * osBean.getAvailableProcessors(); // 系统态CPU时间double idleCpuTime = (1 - osBean.getSystemCpuLoad()) * osBean.getAvailableProcessors(); // 空闲CPU时间cpuPropertiesMap.put("用户使用率:" , userCpuLoad);cpuPropertiesMap.put("系统使用率:" , systemCpuTime);cpuPropertiesMap.put("当前空闲率:" , idleCpuTime);redisUtil.hmset("cpu_message",cpuPropertiesMap);return "set success";}@PostMapping("/memoryMessage")public String memoryMessage(){Map<String,Object>  cpuPropertiesMap = new HashMap<String,Object>();// 获取内存long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize(); // 物理内存总量long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲物理内存量long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize(); // 交换空间总量long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize(); // 空闲交换空间量cpuPropertiesMap.put("物理内存总量:" , totalPhysicalMemorySize / (1024 * 1024) + " MB");cpuPropertiesMap.put("空闲物理内存量:" ,freePhysicalMemorySize / (1024 * 1024) + " MB");cpuPropertiesMap.put("交换空间总量:" , totalSwapSpaceSize / (1024 * 1024) + " MB");cpuPropertiesMap.put("空闲交换空间量:" , freeSwapSpaceSize / (1024 * 1024) + " MB");long totalMemorySize = osBean.getTotalPhysicalMemorySize(); // 总内存大小long freeMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲内存大小long usedMemorySize = totalMemorySize - freeMemorySize; // 已用内存大小double memoryUsage = (double) usedMemorySize / totalMemorySize * 100; // 内存使用率cpuPropertiesMap.put("总内存:" , formatMemorySize(totalMemorySize));cpuPropertiesMap.put("已用内存:" , formatMemorySize(usedMemorySize));cpuPropertiesMap.put("剩余内存:" , formatMemorySize(freeMemorySize));cpuPropertiesMap.put("内存使用率:" , String.format("%.2f", memoryUsage) + "%");redisUtil.hmset("memory_essage",cpuPropertiesMap);return "set success";}@PostMapping("/diskMessage")public String diskMessage(){Map<String,Object>  diskPropertiesMap = new HashMap<String,Object>();File[] roots = File.listRoots();for (File root : roots) {String path = root.getAbsolutePath();long totalSpace = root.getTotalSpace(); // 总容量long usableSpace = root.getUsableSpace(); // 可用容量double usage = (double) (totalSpace - usableSpace) / totalSpace * 100; // 使用率diskPropertiesMap.put("磁盘路径:" , path);diskPropertiesMap.put("总容量:" , formatMemorySize(totalSpace));diskPropertiesMap.put("可用容量:" , formatMemorySize(usableSpace));diskPropertiesMap.put("使用率:" , String.format("%.2f", usage) + "%");try {FileStore store = Files.getFileStore(root.toPath());String fsType = store.type();String fsName = store.name();diskPropertiesMap.put("文件系统类型:" , fsType);diskPropertiesMap.put("文件系统名称:" , fsName);redisUtil.hmset("disk_message"+fsName , diskPropertiesMap);} catch (IOException e) {e.printStackTrace();}}return "diskMessage set success";}/*** 格式化容量大小** @param bytes* @return*/private static String formatMemorySize(long bytes) {double kiloBytes = bytes / 1024.0; // 将字节数转换为千字节double megaBytes = kiloBytes / 1024.0; // 将千字节转换为兆字节double gigaBytes = megaBytes / 1024.0; // 将兆字节转换为千兆字节if (gigaBytes >= 1) { // 如果容量大于等于1GBreturn String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位} else if (megaBytes >= 1) { // 如果容量大于等于1MBreturn String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位} else if (kiloBytes >= 1) { // 如果容量大于等于1KBreturn String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位} else { // 如果容量小于1KBreturn String.format("%d B", bytes); // 格式化输出字节数}}}

获取Redis数据

@GetMapping("/getMessage/{message}")
public Map<String, Object> getMessage(@PathVariable("message") String message) throws JsonProcessingException {// 获取 Hash 操作对象HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();Map<String, Object> hashData = hashOperations.entries(message);return hashData;
}

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

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

相关文章

Windows11如何让桌面图标的箭头消失(去掉快捷键箭头)

在Windows 11中&#xff0c;桌面图标的箭头是快捷方式图标的一个标志&#xff0c;用来表示该图标是一个指向文件、文件夹或程序的快捷方式。如果要隐藏这些箭头&#xff0c;你需要修改Windows注册表或使用第三方软件。 在此之前&#xff0c;我需要提醒你&#xff0c;修改注册表…

俄罗斯方块小游戏开发

代码图&#xff1a; import pygame, randompygame.init()# 游戏界面参数 width 300 height 600 surface pygame.display.set_mode((width, height))# 颜色定义 black (0, 0, 0) white (255, 255, 255) red (200, 0, 0) green (0, 200, 0) blue (0, 0, 200)# 俄罗斯方块…

我与开源的历程

我在2000年开始接触开源&#xff0c;当时在松下航空电子美国总部工作。我负责将 IFE 系统从 Win31 迁移到 Linux。作为一个完全不懂 Linux 的小白&#xff0c;我不得不找到一台笔记本电脑安装并自学 Redhat Linux 6.1。2003年回到新加坡后&#xff0c;我发现没有一个凝聚 Linux…

Echarts 柱状图添加标记 最大值 最小值 平均值

标记 最大值 最小值 series: [//图表配置项 如大小&#xff0c;图表类型{name: 图例,type: bar,//图表类型data: [{value: 500,time: 2012-11-12},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}] …

云轴科技ZStack信创云平台助力国泰君安期货实现信创改造

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack 产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中&#xff0c;我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的&#xff0c;但当涉及选择框时&#xff0c;我们需要更为智能和高效的解决方案。在本文中&#xff0c;我们将分享一种基于 Element UI 的实际案例&am…

WPF绘制进度条(弧形,圆形,异形)

前言 WPF里面圆形进度条实现还比较麻烦,主要涉及到的就是动态绘制进度条的进度需要用到简单的数学算法。其实原理比较简单,我们需要的是话两条重叠的弧线,里面的弧线要比里面的弧线要宽,这样简单的雏形就出来了。 基础写法 我们可以用Path来绘制弧线,代码如下: <Gr…

vue中.sync修饰符与$emit(update:xxx)双向数据绑定

文章目录 一、单向数据流二、props父子传值2.1、父组件2.2、子组件2.3、优缺点2.3.1、优点2.3.2、缺点 三、.sync修饰符双向绑定3.1、父组件3.2、子组件3.3、优缺点3.3.1、优点3.3.2、缺点 3.4、[文档](https://v2.cn.vuejs.org/v2/guide/components-custom-events.html#sync-%…

(Ant X6)子组件里的流程图画布无法显示

(Ant X6)子组件里的流程图画布无法显示 问题背景&#xff1a;侧导航页面都是子组件,建模页面的画布无法显示 解决前&#xff1a; 解决后&#xff1a; 解决思路&#xff1a;点击建模菜单时再次加载对应组件 在 Vue 中&#xff0c;每个组件都有一个唯一的 key 属性。当组件的 ke…

HTML-标签之文字排版、图片、链接、音视频

1、标签语法 HTML超文本标记语言——HyperText Markup Language 超文本是链接标记也叫标签&#xff0c;带尖括号的文本 2、HTML基本骨架 HTML基本骨架是网页模板 html&#xff1a;整个网页head&#xff1a;网页头部&#xff0c;存放给浏览器看的代码&#xff0c;例如CSSbody…

【智能家居】二、添加火灾检测模块(烟雾报警功能点)

可燃气体传感器 MQ-2 和 蜂鸣器 代码段 controlDevice.h&#xff08;设备控制&#xff09;smokeAlarm.c&#xff08;烟雾报警器&#xff09;buzzer.c&#xff08;蜂鸣器&#xff09;mainPro.c&#xff08;主函数&#xff09;运行结果 可燃气体传感器 MQ-2 和 蜂鸣器 代码段 …

Linux基础操作二:Linux系统介绍

1、系统启动过程 Linux系统的启动过程并不是大家想象中的那么复杂&#xff0c;其过程可以分为5个阶段&#xff1a; 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 1.1、内核引导 当计算机打开电源后&#xff0c;首先是BIOS开机自检&#xff0c;按照BIOS中…