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

目录

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

前言

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

一、引入 Maven 依赖

	<dependency>
	    <groupId>org.springframework.shellgroupId>
	    <artifactId>spring-shell-starterartifactId>
	    <version>2.0.0.RELEASEversion>
	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")
  • 设定命令的别名 : 可以通过 stopsr 来执行命令
	@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

你可能感兴趣的:(Spring,spring,boot,shell,控制台,交互)