`
tmj_159
  • 浏览: 707323 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

Spring shell的使用

 
阅读更多

工作这么多年了,权且大胆的预测,现在绝大部分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>

  

希望对你有所帮助,谢谢大家。

 

 

分享到:
评论

相关推荐

    spring-shell的jar包

    1. **命令解析**:Spring Shell使用一种基于空间分隔的命令行解析机制,允许用户输入命令并进行执行。它支持命令别名、参数和选项,使得命令行接口更加灵活和友好。 2. **自动补全**:通过集成JLine库,Spring ...

    spring-shell-1.1.0.RC1-dist

    4. **类型安全的命令参数**:通过使用Spring的依赖注入机制,Spring Shell可以确保命令参数的类型安全,避免因输入错误导致的运行时异常。 5. **与Spring Framework的无缝集成**:由于Spring Shell是Spring家族的一...

    ssh-shell-spring-boot:ssh上的Spring Boot应用程序中的Spring Shell

    Spring Boot Ssh Shell ssh的Spring Boot应用程序中的Spring Shell 有关更多信息,请访问spring ... 您可以使用以下属性禁用它们: spring : autoconfigure : exclude : - org.springframework.shell.jline.JLineShell

    Spring cloud function SpEL RCE批量检测脚本,反弹shell脚本

    Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和...反弹shell脚本:python Spel_RCE_Bash_EXP.py url lhost lport 受影响版本:3.0.0.RELEASE &lt;= Spring Cloud Function &lt;= 3.2.2

    spring-shell:基于Spring的交互式Shell

    弹簧壳3 Spring Shell 3是一项仅依赖于Spring Boot 2.x的工作,并且不尝试与旧版Spring Shell 1.x或Spring Boot 1.x保持任何向后兼容性。建造 ./mvnw package跑步该项目附带一个示例应用程序,展示了您可以编写命令...

    Linux下SpringBoot/SpringCloud微服务部署Shell

    Linux下SpringBoot/SpringCloud微服务部署Shell,对微服务jar进行部署,格式如下: sh spring-boot.sh $OPERATION jar包.jar --spring.profiles.active={自定义} OPERATION支持start、stop、status

    java spring-boot shell 启动器

    Java Spring-Boot Shell 启动器是一个实用工具,它提供了通过Shell脚本来管理Spring-Boot应用的便捷方式。这个启动器允许用户启动、停止、重启和查看应用日志,而无需手动使用`kill`命令来结束进程。在IT环境中,...

    spring roo使用文档

    - **Shell 特性**:Spring Roo 提供了丰富的命令行功能,支持自动完成等功能。 - **IDE 集成**:推荐使用 IntelliJ IDEA 或 Eclipse 等主流 IDE 进行开发。 - **构建系统**:使用 Maven 作为构建工具,支持多模块...

    spring-shell-sample:一个帮助我开始使用 Spring Shell 的项目。 这是一个很好的起点(并使用 maven)

    弹簧壳样品这是一个使用 Spring Shell(当前版本为 1.1.0-RELEASE)的参考项目。 它使用 maven 来编译、测试、构建和部署。Maven 用例编译/测试/安装mvn clean install运行(通过 Maven) mvn exec:java构建可执行...

    Spring Boot调用 Shell 脚本实现看门狗功能

    概述:本文主要介绍了使用 Spring Boot 调用 Shell 脚本实现看门狗功能的方法,通过实例代码详细地展示了实现过程,具有很高的参考价值。 一、什么是看门狗功能? 看门狗功能是指程序可以自动地检测另外一个程序...

    Spring4Shell的漏洞原理分析.doc

    Spring4Shell 漏洞原理分析 Spring4Shell 是一个最近曝出的 RCE 漏洞,影响范围包括 JDK 9 及以上、Tomcat 部署的应用、Spring MVC 或 WebFlux 应用。该漏洞的出现引起了广泛关注,本文将深入分析该漏洞的原理。 ...

    project-commandline:使用Spring Shell的命令行项目

    本文将深入探讨如何使用Spring Shell构建命令行项目,即"project-commandline"。 首先,Spring Shell的核心理念是利用Spring的依赖注入(DI)和组件扫描能力,为开发者提供一个可配置的命令执行环境。这使得开发者...

    Kafractive是用于kafka管理的交互式CLI工具,构建于Spring Shell之上(95分以上课程大作业).zip

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...

    bitnami-docker-spring-cloud-skipper-shell:Bitnami Spring Cloud Skipper Shell Docker映像

    什么是Spring Cloud Skipper Shell? 一个软件包管理器,可以在多个云平台上安装,升级和回滚Spring Boot应用程序。 船长可以用作实施持续部署实践的一部分。 该docker映像附带了官方Shell与船长服务器进行交互。 ...

    基于Spring Boot和Spring Cloud的微服务架构设计源码

    项目包含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

    在实际应用中,使用SSH Secure Shell通常涉及以下步骤: 1. 安装SSH服务器:在Linux服务器上安装SSH服务,如在Debian/Ubuntu系统中使用`sudo apt-get install openssh-server`,在CentOS/RHEL系统中使用`sudo yum ...

    Spring Cloud Data Flow用Shell来建立CICD.docx

    为了使用SCDF Shell,首先需要确保本地环境中已安装Java环境,并且下载了`spring-cloud-dataflow-shell-2.5.3.RELEASE.jar`这个可执行的JAR包。接着可以通过以下命令启动Shell: ```bash java -jar spring-cloud-...

Global site tag (gtag.js) - Google Analytics