Java教程

Spring shell学习笔记

本文主要是介绍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学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!