Spring Boot 使用 Shell 实现控制台交互

tech2025-11-02  1

目录

前言一、引入 Maven 依赖二、创建命令类1. 命令类2. 说明 三、进击1. 禁止自动进入到 shell 模式.2. 自定义命令3. 命令参数2.1 使用命令参数2.2 自定义命令参数2.3 验证命令参数 4. 查询命令 参考

前言

Spring-Shell 基于 JLine 库提供了提供了 REPL 模式的控制台交互工具,我们可以通过自定义命令实现控制台交互。

一、引入 Maven 依赖

<dependency> <groupId>org.springframework.shell</groupId> <artifactId>spring-shell-starter</artifactId> <version>2.0.0.RELEASE</version> </dependency>

二、创建命令类

1. 命令类

@ShellComponent("cmdShell") public class Shell { @Resource private AnchorExecutor anchorExecutor; private DeviceDb db = DeviceDb.getInstance(); @ShellMethod("stop rtls") public void stopRtls() { anchorExecutor.stopRtls(); } }

2. 说明

@ShellComponent Shell 类注解@ShellMethod 命令方法注解,默认情况下方法名将被用来作为命令名称。驼峰式命名转换为横线连接的名称。例如 stopRtls() 对应的命令为: stop-rtls,在控制台输入 stop-rtls 会执行 stopRtls() 方法。

三、进击

1. 禁止自动进入到 shell 模式.

spring.shell.interactive.enabled: false

2. 自定义命令

设定命令名:命令名被设定为 stop @ShellMethod("stop rtls", key="stop") 设定命令的别名 : 可以通过 stop 或 sr 来执行命令 @ShellMethod("stop rtls", key="{stop, sr}")

3. 命令参数

2.1 使用命令参数

参数名,通过 -- 命令名 --参数名 1 参数值 1 --参数名 2 参数值 2 ... 直接传参,并按参数出现的顺序来调用命令。 参数名 参数值 1 参数值 2

2.2 自定义命令参数

@ShellOption 注解可以自定义调用参数名、参数默认值、多参数。

使用示例: @ShellMethod("Say hello.") public String sayHello(@ShellOption(value="a", defaultValue="World") String who) { return "Hello " + who; } value 属性指定参数调用名defaultValue 属性设定参数默认值arity 属性接收一个数组

2.3 验证命令参数

Spring shell 集成了 Bean Validation API,支持参数校验。

@ShellMethod("Change password.") public String changePassword(@Size(min = 8,max = 40)String password) { return "Password: " + password; }

4. 查询命令

当输入 help 命令时,会看到系统所支持的命令信息。

参考

https://blog.csdn.net/Revivedsun/article/details/99503088

最新回复(0)