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

相关推荐
这周也會开心4 分钟前
SSM 配置 index 页面的实现方式
java·tomcat·springmvc
黎雁·泠崖8 分钟前
Java继承入门:概念+特点+核心继承规则
java·开发语言
AIFQuant19 分钟前
如何通过股票数据 API 计算 RSI、MACD 与移动平均线MA
大数据·后端·python·金融·restful
sheji341622 分钟前
【开题答辩全过程】以 小区物业管理APP为例,包含答辩的问题和答案
java
x70x8025 分钟前
Go中nil的使用
开发语言·后端·golang
星辰徐哥33 分钟前
Java程序的编译与运行机制
java·开发语言·编译·运行机制
老毛肚33 分钟前
Spring 6.0基于JDB手写定制自己的ROM框架
java·数据库·spring
Sylvia-girl36 分钟前
线程安全问题
java·开发语言·安全
沛沛老爹43 分钟前
Web开发者转型AI安全实战:Agent Skills敏感数据脱敏架构设计
java·开发语言·人工智能·安全·rag·skills
曹轲恒44 分钟前
Java并发包atomic原子操作类
java·开发语言