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

createh54个月前 (01-08)技术教程67

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自动化脚本的执行、文件系统的交互管理等操作。

相关文章

命令行参数

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

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

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

基于jdk11的Java入门教程-(2)命令行工具

JDK安装完成之后,本身是没有类似IDE集成开发工具,所有工作都需要在终端窗口中输入命令来完成,对于新手在使用IDE开发程序之前有必要掌握此技能,这有助于理解和掌握开发环境的后台工作方式。在掌握编译和...

Linux常用命令大全(最完整)

端口监听查看:ss -tln 查看TCP的listen的端口ss -tlnp 查看哪些进程使用了监听端口防火墙systemctl status iptables (或service iptables...

11款常用Java编程软件推荐(建议收藏)

大家好,我是mikechen。优秀的Java编程软件可以极大的提升我们的开发效率,所以今天给大家推荐一波必备Java编程软件@mikechen本篇已经收纳于mikechen创作的《阿里架构师进阶专题合...

Linux详解系列2- 这100条常见命令你都用过哪些?

接着上面的文章继续介绍 ,上一篇文章请见:Linux详解系列一:如何安装系统及客户端工具的使用 。本篇主要介绍Linux的目录结构及常见命令部分 。Linux目录结构说明Linux命令集合一.Linu...