Spring Boot整合Spring Shell工具进行命令行应用开发?

Spring Shell是一个基于Spring框架开发的命令行应用程序开发工具。它主要是为开发者提供了一组方便快捷的API工具,用来创建可扩展的命令行页面应用程序,下面我们就来详细的介绍一下在Spring Boot中如何使用这个工具来开发一个简单的命令行应用程序。

Spring Boot应用实现

首先需要在SpringBoot的POM依赖汇中添加Spring Shell的依赖配置,如下所示。

<dependencies>
    <dependency>
        <groupId>org.springframework.shell</groupId>
        <artifactId>spring-shell-starter</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>
</dependencies>

第二步,需要创建一个任务执行的Task的实体类包含描述以及所要执行的命令信息,如下所示。

public class Task {
    private String description;
    private boolean completed;

    public Task(String description) {
        this.description = description;
        this.completed = false;
    }

    public String getDescription() {
        return description;
    }

    public boolean isCompleted() {
        return completed;
    }

    public void setCompleted(boolean completed) {
        this.completed = completed;
    }

    @Override
    public String toString() {
        return (completed ? "[x] " : "[ ] ") + description;
    }
}

第三步、创建一个TaskService管理类来进行命令行任务的管理,如下所示。

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class TaskService {
    private final List<Task> tasks = new ArrayList<>();

    public void addTask(String description) {
        tasks.add(new Task(description));
    }

    public List<Task> listTasks() {
        return new ArrayList<>(tasks);
    }

    public void completeTask(int index) {
        if (index >= 0 && index < tasks.size()) {
            tasks.get(index).setCompleted(true);
        }
    }

    public void deleteTask(int index) {
        if (index >= 0 && index < tasks.size()) {
            tasks.remove(index);
        }
    }
}

第四步、创建命令类TaskCommands来定义Shell命令,如下所示。

import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
import org.springframework.shell.standard.ShellOption;

import java.util.List;

@ShellComponent
public class TaskCommands {
    private final TaskService taskService;

    public TaskCommands(TaskService taskService) {
        this.taskService = taskService;
    }

    @ShellMethod("Add a new task.")
    public String addTask(@ShellOption String description) {
        taskService.addTask(description);
        return "Task added: " + description;
    }

    @ShellMethod("List all tasks.")
    public List<String> listTasks() {
        List<Task> tasks = taskService.listTasks();
        List<String> taskDescriptions = tasks.stream()
                                              .map(Task::toString)
                                              .toList();
        return taskDescriptions;
    }

    @ShellMethod("Complete a task by its index.")
    public String completeTask(@ShellOption int index) {
        taskService.completeTask(index);
        return "Task " + index + " marked as completed.";
    }

    @ShellMethod("Delete a task by its index.")
    public String deleteTask(@ShellOption int index) {
        taskService.deleteTask(index);
        return "Task " + index + " deleted.";
    }
}

使用注解 (@ShellComponent 和 @ShellMethod) 定义命令,并且每个命令可以对应一个方法,这些方法可以接收用户输入的参数,作为方法执行的参数来进行操作。

在启动类或者是在配置类中添加TaskService作为任务执行的Bean来注入到容器中如下所示。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class TaskManagerApplication {

    public static void main(String[] args) {
        SpringApplication.run(TaskManagerApplication.class, args);
    }

    @Bean
    public TaskService taskService() {
        return new TaskService();
    }
}

运行应用程序之后,我们就可以在命令行中输入如下的命令来管理需要执行的任务,如下所示。

添加任务:addTask "Read a book"
列出任务:listTasks
完成任务:completeTask 0
删除任务:deleteTask 0

以上就是一个基于Spring Shell的高级任务管理的应用程序的示例代码,在这个应用程序中展示了如何通过SpringShell来创建一个功能齐全的命令行应用程序,包含了添加、展示、完成执行、删除任务等操作。

当然在实际场景中我们还可以通过SpringShell工具来完成例如数据库管理工具的开发、DevOps自动化脚本的执行、文件系统的交互管理等操作。

相关文章

网络常见的 9 大命令,非常实用

1.ping 命令ping 是个使用频率极高的实用程序,主要用于确定网络的连通性。这对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping 就是一个测试程序,如果 ping 运行正确,...

命令行参数

用过Unix命令行,都会感受它的强大。Unix like包括Linux发行版、macOS等命令行在大部分情况下比图形化高效太多,很多高手都在用命令行。CUI和GUI尽管专业的程序员通常用CUI, 但G...

如何用java执行cmd命令

什么场景下用到cmd命令windows的cmd命令对于编程的小伙伴们来说应该是再熟悉不过了,比如说安装完node之后我们要查看一下node是否安装成功那么我们可以通过cmd命令行输入node -v来查...

Java中命令行调用大坑

Java中命令行调用大坑背景我司有一个查询服务接口机,QPS大概40~50,调用方式是Java调用Shell命令行的方式,核心代码如下:Process ps = Runtime.getRuntime(...

快速命令行界面

什么是快速 CLI?快速 CLI 是在 Java 中创建命令行程序的最快方法。它是一个基于开源注释的框架,用于创建shell程序。它使应用程序开发人员能够构建命令行工具,而无需编写样板代码。它非常简单...

你了解JDK常用的7种命令行工具吗?

1 jps1.1 介绍jps是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,用来显示当前系统的java进程情况及进程id。1.2 命令格式jps [options] [hos...