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

createh53个月前 (01-08)技术教程57

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

相关文章

手把手教你写Java-Agent

Java Agent是目前是各种监测调试JVM的主要技术。Eclipse,IntelliJ,Visual VM ,JConsole 等都依赖于此技术。相信你们的Java 程序部署的时候肯定也会配置各种...

Windows cmd命令行常见使用说明

1. 介绍关于windows 下的cmd 一些常见命令的使用。cmd 的全称叫做:Command 。可以叫做命令行,也可以叫做终端。它原先是windows的Doc操作系统,就如同Linux系统中的命令...

Linux上,最常用的一批命令解析(十年精选,超详细)

Linux最常用命令合辑十年精选万字熬夜肝文建议收藏 | 分享一、系统目录结构1. / :根每一个文件和目录从根目录开始。只有root用户具有该目录下的写权限。请注意,/root是root用户的主目录...

看完这篇 我也会用命令行来启动程序了

最近在配置一些java相关环境的时候,本着不出错的原则,就百度了一下详细的教程,可是发现多数教程只是写了一大堆代码,但是都未能谈论到本质的东西,所以,我决定和大家来谈一下这个各大软件(语言编辑器)配置...

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

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