在 Java Spring Boot 中输出 CPU、内存、硬件和线程信息

随着计算机技术的快速发展,了解系统性能变得愈发重要。在 Java Spring Boot 项目中,可以通过收集和展示系统的 CPU、内存、硬件和线程信息,帮助研发人员更好地了解应用的运行状态。本文将为刚入行的小白开发者提供详细的步骤和代码示例,帮助你实现这一功能。

流程概述

首先,我们需要明确实现的步骤。以下是整个流程的概述:

步骤 描述
1 创建 Spring Boot 项目
2 添加依赖
3 编写服务类,获取系统信息
4 创建 Controller,暴露 REST API
5 测试接口,查看系统信息

1. 创建 Spring Boot 项目

首先,你可以使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择基本的 Spring Web 依赖。确保你在 pom.xml 文件中添加了 Spring Boot 的相关依赖。

2. 添加依赖

pom.xml 文件中,添加以下 Maven 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

3. 编写服务类,获取系统信息

接下来,我们需要创建一个服务类,该类将用于收集系统的 CPU、内存、硬件和线程信息。

import org.springframework.stereotype.Service;

import com.sun.management.OperatingSystemMXBean;
import java.lang.management.ManagementFactory;

@Service
public class SystemInfoService {

    public String getSystemInfo() {
        OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
        
        // 获取总内存
        long totalMemory = osBean.getTotalPhysicalMemorySize();

        // 获取已用内存
        long usedMemory = totalMemory - osBean.getFreePhysicalMemorySize();
        
        // 获取 CPU 使用率
        double cpuLoad = osBean.getSystemCpuLoad() * 100;

        StringBuilder info = new StringBuilder();
        info.append("Total Memory: ").append(totalMemory / (1024 * 1024)).append(" MB\n");
        info.append("Used Memory: ").append(usedMemory / (1024 * 1024)).append(" MB\n");
        info.append("CPU Load: ").append(cpuLoad).append(" %\n");
        
        return info.toString();
    }
}

4. 创建 Controller,暴露 REST API

然后,再添加一个控制器来暴露 REST API。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SystemInfoController {

    @Autowired
    private SystemInfoService systemInfoService;

    @GetMapping("/system-info")
    public String fetchSystemInfo() {
        // 调用服务类,获取系统信息
        return systemInfoService.getSystemInfo();
    }
}

5. 测试接口,查看系统信息

现在可以使用 Postman 或 Curl 测试该 API:

curl http://localhost:8080/system-info

你应该能够看到类似如下的输出:

Total Memory: 4096 MB
Used Memory: 2048 MB
CPU Load: 25.0 %

类图

接下来是整个系统的类图,用 mermaid 表示如下:

classDiagram
    class SystemInfoService {
        +getSystemInfo()
    }

    class SystemInfoController {
        +fetchSystemInfo()
    }

    SystemInfoService --> SystemInfoController : Used by

序列图

最后,将应用的类之间的交互过程以序列图表示如下:

sequenceDiagram
    participant Controller
    participant Service
    Controller->>Service: fetchSystemInfo()
    Service-->>Controller: getSystemInfo()
    Controller-->>Client: return system information

结论

通过以上步骤,你成功地在一个 Java Spring Boot 应用中收集并输出了 CPU、内存、硬件和线程等信息。记得不断探索和学习,掌握更多 Spring Boot 的功能,以提高你的开发能力。如果你在实现过程中遇到任何问题,欢迎随时提问。希望这篇文章能够帮助你在开发旅程中迈出坚实的一步!