并非所有的应用程序都需要花哨的web用户界面,有时,通过交互式终端与应用程序交互是完成任务的最合适方式。
Spring Shell允许您创建这样一个可运行的应用程序,用户可以在其中输入文本命令,这些命令将一直运行,直到程序终止。Spring Shell项目提供了创建这样一个REPL(Read, Eval, Print Loop)应用程序的基础设施,让你可以通过使用熟悉的Spring编程模型专注于实现命令。
Spring Shell包括高级功能(如解析、标签完成、输出着色、花哨的ASCII艺术表显示、输入转换和验证),使您可以专注于核心命令逻辑。
当前Spring Shell最新版本是3.3.2版本,是基于Spring Boot 3.3.3版本、Spring Framework 6.1.12、JDK17;为了了解spring shell提供了什么,我们可以编写一个简单的hello world shell应用程序,它有一个简单的参数。
- 新建一个maven项目pom中新增如下依赖
<properties><spring-shell.version>3.3.2</spring-shell.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.shell</groupId><artifactId>spring-shell-starter</artifactId></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.shell</groupId><artifactId>spring-shell-dependencies</artifactId><version>${spring-shell.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
- 启用应用程序
spring.shell.interactive.enabled=true
在3.2.x版本之前默认启用了所有运行程序,从3.3.x开始,默认情况下只启用了NonInteractiveShellRunner。这意味值需要启用InteractiveShellRunner才能获取REPL。
- 新建DemoApplication启动类及定义一个简单的命令hi
@ShellComponent
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@ShellMethodpublic String hi() {return "hi";}
}
- 通过maven打包后运行应用程序
xx:target xx$ java -jar spring-shell-demo-1.0-SNAPSHOT.jar . ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.3.3)2024-09-11T15:17:59.145+08:00 INFO 15898 --- [ main] io.github.mingyang66.DemoApplication : Starting DemoApplication v1.0-SNAPSHOT using Java 17.0.6 with PID 15898 (/Users/yaomingyang/Documents/IDE/workplace-java/spring-shell-demo/target/spring-shell-demo-1.0-SNAPSHOT.jar started by yaomingyang in /Users/yaomingyang/Documents/IDE/workplace-java/spring-shell-demo/target)
2024-09-11T15:17:59.154+08:00 INFO 15898 --- [ main] io.github.mingyang66.DemoApplication : No active profile set, falling back to 1 default profile: "default"
2024-09-11T15:18:01.260+08:00 INFO 15898 --- [ main] io.github.mingyang66.DemoApplication : Started DemoApplication in 2.931 seconds (process running for 3.734)
shell:>hi
hi
shell:>
官方文档:https://docs.spring.io/spring-shell/reference/index.html
开源SDK:https://github.com/mingyang66/spring-parent