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

相关推荐
Yeats_Liao8 分钟前
Spring 框架:配置缓存管理器、注解参数与过期时间
java·spring·缓存
Yeats_Liao8 分钟前
Spring 定时任务:@Scheduled 注解四大参数解析
android·java·spring
码明8 分钟前
SpringBoot整合ssm——图书管理系统
java·spring boot·spring
某风吾起12 分钟前
Linux 消息队列的使用方法
java·linux·运维
xiao-xiang16 分钟前
jenkins-k8s pod方式动态生成slave节点
java·kubernetes·jenkins
网络风云17 分钟前
golang中的包管理-下--详解
开发语言·后端·golang
取址执行27 分钟前
Redis发布订阅
java·redis·bootstrap
S-X-S40 分钟前
集成Sleuth实现链路追踪
java·开发语言·链路追踪
快乐就好ya1 小时前
xxl-job分布式定时任务
java·分布式·spring cloud·springboot
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis