Spring Shell——快速构建终端应用,自定义终端命令

Spring Shell是spring的一个子项目,通过Spring Shell可以快速构建一个终端应用。并且可以通过@ShellComponent注解很方便地自定义终端命令。

这篇文章就介绍一下如何在项目中使用Spring Shel

第一步:创建项目

创建一个springboot项目springboot-springshell

第二步:添加依赖

修改springboot依赖版本,添加spring-shell-starter的依赖。

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>cn.edu.sgu.www</groupId>
    <artifactId>springboot-springshell</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-springshell</name>
    <description>Spring Boot整合Spring Shell</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

第三步:定义命令

使用@ShellComponent+@ShellMethod自定义命令。

1、无参数命令

java 复制代码
package cn.edu.sgu.www.shell.command;

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

/**
 * @author heyunlin
 * @version 1.0
 */
@ShellComponent
public class Commands {

    @ShellMethod("初始化项目环境。")
    public String init() {
        // todo

        return "初始化项目环境完成...";
    }

}

2、有参数的命令

java 复制代码
package cn.edu.sgu.www.shell.command;

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

/**
 * @author heyunlin
 * @version 1.0
 */
@ShellComponent
public class Commands {

    @ShellMethod("计算两个整数的和。")
    public int add(int a, int b) {
        return a + b;
    }

}

3、设置参数选项

比如设置参数默认值

java 复制代码
package cn.edu.sgu.www.shell.command;

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

/**
 * @author heyunlin
 * @version 1.0
 */
@ShellComponent
public class Commands {

    @ShellMethod("打招呼:")
    public String greet(@ShellOption(defaultValue = "沐雨橙风ιε") String name) {
        return "Hello " + name;
    }

}

4、设置参数校验

比如:设置参数最大值和最小值,可以使用Hibernate Validator的数据校验注解。

java 复制代码
package cn.edu.sgu.www.shell.command;

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

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * @author heyunlin
 * @version 1.0
 */
@ShellComponent
public class Commands {

    @ShellMethod("计算平方数。")
    public int sqrt(@Min(value = 1) @Max(value = 99) int n) {
        return n * n;
    }

}

第四步:使用命令

启动项目,然后在控制台上就可以直接使用各种命令了,方法的参数直接在命令后面输入。

项目已经上传到git,可按需获取~

Spring Boot整合Spring Shell案例项目https://gitee.com/muyu-chengfeng/springboot-springshell.git

相关推荐
牛奶2 分钟前
开发者的"奇技淫巧":那些让你效率翻倍的实战技巧
前端·后端·程序员
泉城老铁3 分钟前
springboot实现word转换pdf
vue.js·后端
铁皮哥7 分钟前
【后端/Agent 开发】给你的项目配置一套 .claude/ 工作流:别再裸用 Claude Code 了!
java·windows·python·spring·github·maven·生活
铁皮饭盒13 分钟前
今天你会学到这些关键词
前端·后端
乐之者v13 分钟前
AI编程 -- codex添加代码,在intellij Idea中没有显示,如何处理?
java·ide·intellij-idea
oil欧哟21 分钟前
🤔 很长时间没写文章了,分享一下最近的一些思考
前端·后端
Walter先生23 分钟前
MCP行情数据接入配置踩坑全记录:从Claude Code到Zed八大客户端适配实战
后端·websocket·架构·实时行情数据源
2401_878820471 小时前
Sa-Token基础篇
java·spring boot·后端·sa-token
2301_816374331 小时前
Nginx下构建PC站点
java·运维·nginx
无所事事O_o1 小时前
JAVA应用不定时卡顿问题排查过程记录
java·优化