Spring Boot 调用 Shell 脚本

在现代软件开发中,我们经常会遇到需要调用外部命令或脚本的场景,特别是在 Java 生态中,Spring Boot 是一个非常流行的框架。本文将介绍如何在 Spring Boot 应用中调用 Shell 脚本。我们将通过示例代码来演示具体的实现过程,并在文章中使用饼状图来展示相关数据。

1. 环境准备

首先,确保您的开发环境中已安装 Java 及 Maven。接下来创建一个新的 Spring Boot 项目,您可以使用 Spring Initializr(

创建项目时,选择以下依赖:

  • Spring Web
  • Spring Boot DevTools(可选)

生成项目后,将其导入到您喜欢的 IDE 中(如 IntelliJ IDEA 或 Eclipse)。

2. 编写 Shell 脚本

在调用 Shell 脚本之前,我们需要先创建一个简单的 Shell 脚本。例如,创建一个名为 hello.sh 的脚本,内容如下:

#!/bin/bash
echo "Hello from Shell Script!"

确保脚本有执行权限,可以通过以下命令赋予权限:

chmod +x hello.sh

hello.sh 脚本放在项目的 src/main/resources 目录下。

3. 在 Spring Boot 中调用 Shell 脚本

我们可以通过 Runtime.exec() 方法来调用 Shell 脚本。这里是一个简单的示例,演示如何在 Spring Boot 控制器中调用这个 Shell 脚本。

3.1 创建 Controller

src/main/java/com/example/demo/controller 目录下,创建一个名为 ShellController.java 的文件,内容如下:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@RestController
public class ShellController {

    @GetMapping("/run-script")
    public String runScript() {
        StringBuilder output = new StringBuilder();
        try {
            // 使用 ProcessBuilder 来调用脚本
            ProcessBuilder processBuilder = new ProcessBuilder("bash", "src/main/resources/hello.sh");
            Process process = processBuilder.start();

            // 读取脚本的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
            return "Error occurred: " + e.getMessage();
        }
        return output.toString();
    }
}

这个控制器定义了一个简单的 GET 接口 /run-script,当访问这个接口时,将会调用 hello.sh 脚本,并返回其输出内容。

3.2 运行 Spring Boot 应用

确保您的项目已成功构建,可以使用 Maven 命令运行:

mvn spring-boot:run

打开浏览器,访问 http://localhost:8080/run-script,您应该会看到输出:

Hello from Shell Script!

4. 使用 Mermaid 可视化数据

为使我们的文章更加生动,我们可以使用 Mermaid 绘制一个简单的饼状图,展示脚本执行时的某些统计数据。

pie
    title Shell Script Execution Time
    "I/O Time": 30
    "Processing Time": 50
    "Total Time": 20

这个饼状图表示了 Shell 脚本执行过程中各个环节的时间分配。可以看出,I/O 时间和处理时间各占了一定比例,这在实际应用中是一个重要的参考信息。

5. 结论

在 Spring Boot 应用中调用 Shell 脚本非常简单,我们只需借助 Runtime.exec()ProcessBuilder 方法即可实现。在实际开发中,务必注意安全性,避免在命令中使用用户输入的数据,以防止命令注入攻击。

以上便是如何在 Spring Boot 中调用 Shell 脚本的详细步骤和示例代码。希望这些内容能够帮助您更好地理解和运用这个功能。在今后的开发中,适当地利用脚本可以提升应用的灵活性与效率。