牛马的人生,需要Spring Shell

前言

"技术是人类对需求的回应。"

大家好,这里是知行小栈。

最近,一位运营的同学突然给我发来了一串加密的手机号,类似这样:

2f731fb2aea9fb5069adef6e4aa2624e

他让我帮忙解下密,想拿到具体的手机号。

我看了下,也不是啥大事儿。于是找到了对应的项目,直接调用里面的解密方法,将这些号码都打印了出来,给到了他。

本以为事情到此就结束了,结果他隔三岔五的让我去做这个操作(心里os)。判断了下情况,这种需求可能会不间断的发生。顿时,我的大脑就应激了,必须弄个一劳永逸的方案!

命令行

我最先想到的就是命令行。为啥呢?因为命令行有两个特点:

  1. 易于调用;
  2. 简短的命令就能完成指定的功能;

只要制作一个自定义的命令行工具,下次就可以通过这种方式减少繁琐的操作,增加摸鱼的时间。

原先项目中,已经有手机号加解密的功能。基于职业的基本素养(不重复造轮子),之前已有的功能我是不会重写的,而是想办法能直接通过命令行调用。类似:

bash 复制代码
java -jar xxx.jar

这个命令虽然看起来有点长,但可以通过为其起别名的方式,简化命名。实现 ll 等价于 ls -l 的效果。

Spring Shell

想要通过 shell 调用 Java 指定类中的指定方法,方式有许多。我思考了 1 1 3 1\frac{1}{3} 131 秒,就决定采用 Spring Shell(因为它与我想要实现的场景匹配度高达 99.999%)。

首先,我仅需要在原先的项目中多引入一个依赖

xml 复制代码
<dependency>
  <groupId>org.springframework.shell</groupId>
  <artifactId>spring-shell-starter</artifactId>
  <version>2.1.15</version>
</dependency>

然后,实现一个自定义的命令组件

java 复制代码
// @ShellComponent 类似 @Component 表明是 Spring 中的一个组件
@ShellComponent
public class Cipher {

    // @ShellMethod 定义了一个命令,key 属性是命令的名称,value 属性是命令的描述
    // @ShellOption 定义了命令中的参数
    @ShellMethod(key = "decrypt", value = "解密操作")
    public String decrypt(@ShellOption String cipherText, @ShellOption String key) {
        // 调用项目中已有的解密方法
        return AesUtil.decrypt(cipherText, key);
    }

    @ShellMethod(key = "encrypt", value = "加密操作")
    public String encrypt(@ShellOption String text, @ShellOption String key) {
        // 调用项目中已有的加密方法
        return AesUtil.encrypt(text, key);
    }
}

最后,重新将 Shell 组件所在的项目打个包,运行项目

执行命令,验证

到这里,还不行。因为我可不会每次都去执行 java -jar xxx.jar 这么长的命令来启动 Spring Shell。windows 终端我一直用的 Git-Bash,这种类 Unix 的终端都可以采用相同的方式为长命令设置一个别名。

于是,我在 .bash_profile 文件中,给这段长命令起了一个别名:

bash 复制代码
alias shell='java -jar encrypt.jar'

接下来,就可以通过简单的 shell 命令调用 Spring Shell 终端,执行之前定义好的命令了

知行有话

Spring Shell 简直就是开发者的利器。试想一下,我们把日常学习或工作中频繁的操作都弄成这样的终端命令,是不是会节约我们大量的时间?还有一个值得提的点就是它对 Java 开发者十分友好。只要你懂 Java,就可以轻松上手开发自定义的终端命令。

相关推荐
亦暖筑序4 分钟前
Java 8老系统AI工具接入:API包装成受控工具,只读优先+权限拦截
java·人工智能·aigc·企业架构·mcp协议
砍材农夫5 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT 统一接入层
java·网络·spring boot·后端·物联网·spring
写代码的小阿帆5 分钟前
英语四六级证书审核(SpringBoot+Dify+RPA)
java·spring boot
redaijufeng7 分钟前
我在C++中深入理解了继承,收获颇丰
java·c++·算法
苏三说技术7 分钟前
MarkItDown 再次登顶GitHub榜
后端
摇滚侠8 分钟前
Spring 零基础入门到进阶 基于注解的声明式事务 65-70
数据库·mysql·spring
就叫_这个吧14 分钟前
HTML或JSP页面链接CSS,link标签没问题,但不显示样式问题解决
java·前端·css·html·intellij-idea·jsp
IT_陈寒17 分钟前
SpringBoot这个坑差点让我加班到天亮
前端·人工智能·后端
阿坤带你走近大数据18 分钟前
分别介绍下java主流的开发框架、设计模式与对应编程语言的高级特性
java·开发语言·设计模式
小小龙学IT20 分钟前
Go 后端开发中的并发模式:从 Goroutine 到 Pipeline 实战
开发语言·后端·golang