工作这么多年了,权且大胆的预测,现在绝大部分java项目都在用Spring,大家对Spring 的理解还一直是AOP和IOC和Spring MVC的知识吧,其实Spring早就做了重构,在IOC的基础(Spring Context)上做了很多有用的东西,Spring Shell就是这样一个东西。
Spring Shell可以让你的项目很轻松的支持命令行的功能,可能有些人还觉得比较抽象,这么说假如你想让你的项目支持动态启动和停止,即java -jar xxx.jar start 就启动某个服务,然后输入stop就停止,最简单的方式就是解析main方法中的args ,然后调用不同的服务。
其实Spring Shell做的也是类似的东西,只是可以通过一些注解让你很轻松的把注解和方法之间建立联系。
看看下面官网给出的例子
@CliCommand(value = "hw simple", help = "Print a simple hello world message") public String simple( @CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final String message, @CliOption(key = { "location" }, mandatory = false, help = "Where you are saying hello", specifiedDefaultValue="At work") final String location) { simpleCommandExecuted = true; return "Message = [" + message + "] Location = [" + location + "]"; }
程序启动后,输入
hw simple --message hell
其实就调用到上面的方法中了。
我跑起来了一个最简单的例子,现在贴出来供大家理解
package com.tang.test.sprintShell; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.springframework.shell.Bootstrap; import org.springframework.shell.core.CommandResult; import org.springframework.shell.core.JLineShellComponent; public class HelloWorldCommandTest { @Test public void testSimple() { Bootstrap bootstrap = new Bootstrap(); JLineShellComponent shell = bootstrap.getJLineShellComponent(); CommandResult cr = shell.executeCommand("hw simple --message hello"); assertEquals(true, cr.isSuccess()); assertEquals("Message = [hello] Location = [null]", cr.getResult()); } }
我们使用Spring Shell主要写的东西。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.tang.test.springShell" /> </beans>
配置文件
package com.tang.test.sprintShell; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.springframework.shell.Bootstrap; import org.springframework.shell.core.CommandResult; import org.springframework.shell.core.JLineShellComponent; public class HelloWorldCommandTest { @Test public void testSimple() { Bootstrap bootstrap = new Bootstrap(); JLineShellComponent shell = bootstrap.getJLineShellComponent(); CommandResult cr = shell.executeCommand("hw simple --message hello"); assertEquals(true, cr.isSuccess()); assertEquals("Message = [hello] Location = [null]", cr.getResult()); } }
测试类
ps ,注意配置文件需要放在 resources/META-INF下,至于为什么我们看看Bootstrap源码就知道了
public class Bootstrap { private static final String[] CONTEXT_PATH = new String[]{"classpath*:/META-INF/spring/spring-shell-plugin.xml"}; //后面略
最后附上pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework.shell.samples</groupId> <artifactId>helloworld</artifactId> <version>1.1.0.RELEASE</version> <packaging>jar</packaging> <name>helloworld</name> <url>http://maven.apache.org</url> <properties> <spring.shell.version>1.2.0.RC1</spring.shell.version> <jar.mainclass>org.springframework.shell.Bootstrap</jar.mainclass> <log4j.version>1.2.17</log4j.version> <junit.version>4.10</junit.version> </properties> <dependencies> <dependency> <groupId>org.springframework.shell</groupId> <artifactId>spring-shell</artifactId> <version>${spring.shell.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>true</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <useUniqueVersions>false</useUniqueVersions> <classpathPrefix>lib/</classpathPrefix> <mainClass>${jar.mainclass}</mainClass> </manifest> <manifestEntries> <version>${project.version}</version> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>libs-milestone</id> <url>http://repo.spring.io/libs-milestone/</url> </repository> <repository> <id>libs-release</id> <url>http://repo.spring.io/libs-release/</url> </repository> </repositories> </project>
希望对你有所帮助,谢谢大家。
相关推荐
1. **命令解析**:Spring Shell使用一种基于空间分隔的命令行解析机制,允许用户输入命令并进行执行。它支持命令别名、参数和选项,使得命令行接口更加灵活和友好。 2. **自动补全**:通过集成JLine库,Spring ...
4. **类型安全的命令参数**:通过使用Spring的依赖注入机制,Spring Shell可以确保命令参数的类型安全,避免因输入错误导致的运行时异常。 5. **与Spring Framework的无缝集成**:由于Spring Shell是Spring家族的一...
Spring Boot Ssh Shell ssh的Spring Boot应用程序中的Spring Shell 有关更多信息,请访问spring ... 您可以使用以下属性禁用它们: spring : autoconfigure : exclude : - org.springframework.shell.jline.JLineShell
Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和...反弹shell脚本:python Spel_RCE_Bash_EXP.py url lhost lport 受影响版本:3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2
弹簧壳3 Spring Shell 3是一项仅依赖于Spring Boot 2.x的工作,并且不尝试与旧版Spring Shell 1.x或Spring Boot 1.x保持任何向后兼容性。建造 ./mvnw package跑步该项目附带一个示例应用程序,展示了您可以编写命令...
Linux下SpringBoot/SpringCloud微服务部署Shell,对微服务jar进行部署,格式如下: sh spring-boot.sh $OPERATION jar包.jar --spring.profiles.active={自定义} OPERATION支持start、stop、status
Java Spring-Boot Shell 启动器是一个实用工具,它提供了通过Shell脚本来管理Spring-Boot应用的便捷方式。这个启动器允许用户启动、停止、重启和查看应用日志,而无需手动使用`kill`命令来结束进程。在IT环境中,...
- **Shell 特性**:Spring Roo 提供了丰富的命令行功能,支持自动完成等功能。 - **IDE 集成**:推荐使用 IntelliJ IDEA 或 Eclipse 等主流 IDE 进行开发。 - **构建系统**:使用 Maven 作为构建工具,支持多模块...
弹簧壳样品这是一个使用 Spring Shell(当前版本为 1.1.0-RELEASE)的参考项目。 它使用 maven 来编译、测试、构建和部署。Maven 用例编译/测试/安装mvn clean install运行(通过 Maven) mvn exec:java构建可执行...
概述:本文主要介绍了使用 Spring Boot 调用 Shell 脚本实现看门狗功能的方法,通过实例代码详细地展示了实现过程,具有很高的参考价值。 一、什么是看门狗功能? 看门狗功能是指程序可以自动地检测另外一个程序...
Spring4Shell 漏洞原理分析 Spring4Shell 是一个最近曝出的 RCE 漏洞,影响范围包括 JDK 9 及以上、Tomcat 部署的应用、Spring MVC 或 WebFlux 应用。该漏洞的出现引起了广泛关注,本文将深入分析该漏洞的原理。 ...
本文将深入探讨如何使用Spring Shell构建命令行项目,即"project-commandline"。 首先,Spring Shell的核心理念是利用Spring的依赖注入(DI)和组件扫描能力,为开发者提供一个可配置的命令执行环境。这使得开发者...
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...
什么是Spring Cloud Skipper Shell? 一个软件包管理器,可以在多个云平台上安装,升级和回滚Spring Boot应用程序。 船长可以用作实施持续部署实践的一部分。 该docker映像附带了官方Shell与船长服务器进行交互。 ...
项目包含399个文件,主要使用Java、Shell和HTML编程语言。文件类型包括223个Java源代码文件、48个XML配置文件、36个YAML配置文件、35个PNG图片文件、7个YAML文件、6个SQL文件、5个Markdown文档、5个TXT文档、4个VM...
在实际应用中,使用SSH Secure Shell通常涉及以下步骤: 1. 安装SSH服务器:在Linux服务器上安装SSH服务,如在Debian/Ubuntu系统中使用`sudo apt-get install openssh-server`,在CentOS/RHEL系统中使用`sudo yum ...
为了使用SCDF Shell,首先需要确保本地环境中已安装Java环境,并且下载了`spring-cloud-dataflow-shell-2.5.3.RELEASE.jar`这个可执行的JAR包。接着可以通过以下命令启动Shell: ```bash java -jar spring-cloud-...