Spring shell学习笔记
2021/5/15 7:30:09
本文主要是介绍Spring shell学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
公司有一个紧急需求,通过websocket调用服务端接口,由于时间有限决定给客户先做一个命令行的脚本demo,学习了一下spring shell,写个博客记录一下。
1.spring shell 环境
需要引入spring boot
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> </parent>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.shell</groupId> <artifactId>spring-shell-starter</artifactId> <version>2.0.0.RELEASE</version> </dependency>
我还配置了maven的打包工具
<build> <plugins> <plugin> <!-- 配置打包工具 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.5.RELEASE</version> <configuration> <!-- 工程主入口 --> <mainClass>com.bjnet.test.Main</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2.spring shell 的main方法
springboot项目 和 springboot一样
@SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication app = new SpringApplication(Main.class); app.setBannerMode(Banner.Mode.OFF); app.setWebApplicationType(WebApplicationType.NONE); app.run(args); } }
3.springshell 定义命令
- @ShellComponet: 声明将此类注册为spring 的一个脚本组件
- @ShellMehod: 声明一个命令, 默认方法名为命令名称,如果有多个单词,生成的命令用-隔开,例如——方法名:openUser @shellMehod生成的默认命令名是open-user
@ShellComponent public class CalculatorCommands { @ShellMethod("计算两个整数的加法") public int add(int a, int b){ return a + b; } }
打包后 java -jar xxx.jar 运行 add a b
4.springshell 自定义命令名称
将add命令自定义为-a
@ShellComponent public class CalculatorCommands { @ShellMethod(value = "计算两个整数的加法",key = {"-a"}) public int add(int a, int b){ return a + b; } }
命令就变为-a a b,add命令就会失效
5.springshell 参数默认值
当输入的命令需要参数时,可以在参数列表指定一个默认值,用户没有输入参数时会使用默认值
@ShellComponent public class CalculatorCommands { @ShellMethod(value = "计算两个整数的加法",key = {"-a"}) public int add(@ShellOption(defaultValue = "0")int a){ return a + b; } }
-a命令的a的默认值就是0
这里要注意defaultvalue=“0” 双引号不可少
int spring都要加双引号
6.springshell 命令提示符自定义
@Bean public PromptProvider promptProvider() { return () -> new AttributedString("aaa=>", AttributedStyle.DEFAULT.foreground(AttributedStyle.BLUE)); }
命令前的shell就变为了蓝色的 aaa=>
AttributedStyle中还有许多定义文字粗体 隐藏 颜色的,可根据需要自定义
7.springshell 命令限制
@ShellMethod(value = "关闭WebSocket连接",key = {"-c"}) public void close(){ app.stop(); } public Availability closeAvailability(){ return isConnect ? Availability.available(): Availability.unavailable("you are not connect"); }
当用户输入-c命令时 会先执行return中的逻辑 判断是否是连接的 只有连接后才能输入-c关闭命令 否则报错,报错提示写在unavailable中。
这里的closeavailability 对应上面的方法名close 要对应 否则不生效
当然需要多次使用一个验证的时候,也可以指定availability的名字
@ShellMethod(value = "",key = {"-s"}) @ShellMethodAvailability({"isLogin"}) public void start(){ System.out.println("start"); } } @ShellMethod(value = "",key = {"-c"}) @ShellMethodAvailability({"isLogin"}) public void close(){ System.out.println("close"); } } public Availability isLogin(){ return isLogin ? Availability .available():Availability .unavailable("you are not login"); }
只有登录后才能运行开始和关闭命令
@ShellMethodAvailability指定方法名 实现复用
引用:https://blog.csdn.net/zongf0504?spm=1001.2014.3001.5509
这篇关于Spring shell学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南