SpringBoot项目使用OSHI获取系统状态信息报错

SpringBoot项目,使用OSHI获取系统状态信息时,后端打印正常,返回至前端的过程中遇到了以下两个报错

1. java.lang.IllegalStateException: Unmapped relationship: 7

解决方式:添加依赖net.java.dev.jna

        <!-- OSHI -->
        <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
            <version>5.2.5</version>
        </dependency>
        <!-- jna -->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>5.10.0</version>
        </dependency>
2. COM exception querying MSAcpi_ThermalZoneTemperature, which might not be on

解决方式:将获取到的系统状态信息转为String或者整型后再添加到VO中返回

(1)业务逻辑代码
	import com.geo.integrated.model.vo.SystemStatus;
	import com.geo.integrated.service.VisualStatusService;
	import lombok.extern.slf4j.Slf4j;
	import org.springframework.stereotype.Service;
	import oshi.SystemInfo;
	import oshi.hardware.*;
	import oshi.software.os.OperatingSystem;
	
	@Service
	@Slf4j
	public class VisualStatusServiceImpl implements VisualStatusService {
	    /**
	     * 获取系统状态信息
	     *
	     * @return 系统状态信息
	     */
	    @Override
	    public SystemStatus getSystemState() {
	        // 系统信息
	        SystemInfo systemInfo = new SystemInfo();
	        // 操作系统信息
	        OperatingSystem operationSystemInfo = systemInfo.getOperatingSystem();
	        // 硬件信息
	        HardwareAbstractionLayer hardwareInfo = systemInfo.getHardware();
	        /*有了代表硬件信息的对象HardwareAbstractionLayer之后,就可以获取硬件相关的信息了*/
	        // 内存相关信息
	        GlobalMemory memoryInfo = hardwareInfo.getMemory();
	        // 内存总容量
	        String totalMemory = String.valueOf(memoryInfo.getTotal());
	        // 可用内存的容量
	        String availableMemory = String.valueOf(memoryInfo.getAvailable());
	        /*有了内存总容量和内存可用容量,就可以计算出当前内存的利用率了*/
	        // CPU相关信息
	        CentralProcessor processor = hardwareInfo.getProcessor();
	        // CPU型号
	        String processorName = processor.getProcessorIdentifier().getName();
	        // 物理CPU数
	        int physicalPackageCount = processor.getPhysicalPackageCount();
	        //物理核心数
	        int physicalProcessorCount = processor.getPhysicalProcessorCount();
	
	        SystemStatus systemStatus = new SystemStatus(String.valueOf(systemInfo),
	                String.valueOf(operationSystemInfo),
	                String.valueOf(hardwareInfo),
	                String.valueOf(memoryInfo),
	                Long.parseLong(totalMemory) / 1000 / 1000 / 1000,
	                Long.parseLong(availableMemory) / 1000 / 1000 / 1000,
	                String.valueOf(processor), String.valueOf(processorName),
	                Integer.parseInt(String.valueOf(physicalPackageCount)),
	                Integer.parseInt(String.valueOf(physicalProcessorCount)));
	
	        return systemStatus;
	    }
	}
(2)VO代码
	import lombok.AllArgsConstructor;
	import lombok.Data;
	import lombok.NoArgsConstructor;
	
	@Data
	@NoArgsConstructor
	@AllArgsConstructor
	public class SystemStatus {
	    /**
	     * 系统信息
	     */
	    private String systemInfo;
	    /**
	     * 操作系统信息
	     */
	    private String operationSystemInfo;
	    /**
	     * 硬件信息
	     */
	    private String hardwareInfo;
	    /**
	     * 内存相关信息
	     */
	    private String memoryInfo;
	    /**
	     * 内存总容量
	     */
	    private Long totalMemory;
	    /**
	     * 可用内存的容量
	     */
	    private Long availableMemory;
	    /**
	     * CPU相关信息
	     */
	    private String processor;
	    /**
	     * CPU型号
	     */
	    private String processorName;
	    /**
	     * 物理CPU数
	     */
	    private Integer physicalPackageCount;
	    /**
	     * 物理核心数
	     */
	    private Integer physicalProcessorCount;
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一种快速开发的方式。而OSHI是一个Java库,用于获取系统信息,如操作系统、硬件和进程信息。 在Spring Boot中使用OSHI可以方便地获取系统信息并进行处理。你可以通过引入OSHI的依赖来使用它,例如在Maven项目中添加以下依赖: ```xml <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>5.7.4</version> </dependency> ``` 然后,你可以在Spring Boot应用程序中使用OSHI提供的API来获取系统信息。例如,你可以使用`SystemInfo`类来获取操作系统信息使用`HardwareAbstractionLayer`类来获取硬件信息使用`GlobalMemory`类来获取内存信息等等。 以下是一个简单的示例代码,展示了如何在Spring Boot应用程序中使用OSHI获取系统信息: ```java import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.GlobalMemory; @RestController public class SystemInfoController { @GetMapping("/system-info") public String getSystemInfo() { SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory memory = hardware.getMemory(); String os = systemInfo.getOperatingSystem().toString(); long totalMemory = memory.getTotal(); long availableMemory = memory.getAvailable(); return "Operating System: " + os + "\n" + "Total Memory: " + totalMemory + " bytes\n" + "Available Memory: " + availableMemory + " bytes"; } } ``` 这个示例代码中,我们创建了一个`SystemInfoController`类,其中的`getSystemInfo()`方法使用OSHI获取操作系统和内存信息,并将其返回为字符串。 希望这个简单的介绍能够帮助你了解Spring Boot和OSHI的基本用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值