美文网首页程序员Spring Boot首页推荐
SpringBoot基础教程(七)——与remote shell

SpringBoot基础教程(七)——与remote shell

作者: 数齐 | 来源:发表于2018-03-24 12:55 被阅读145次

    话说这个remote shell是个人最喜欢的功能,但是在新版本的spring boot 已经移除了对他的支持,很可惜,不过在新版本中也可以自己引入支持。那我们就着眼于眼前,毕竟我们教程中的版本是还没有移除的。这个remote shell是基于CRaSH,他可以再应用程序中开启端口,默认是2000,我们可以连进正在运行的程序中,达到监控与维护的目的。比如说,我们希望一个正在运行的程序中,某个Bean通过人为的操作下Destroy或者动态的数据订正之类的,都可以通过这个功能实现。
    闲话不多说,我们看下pom

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-remote-shell</artifactId>
            </dependency>
    

    spring-boot-starter-remote-shell 这个模块主要就是将crash引入进来。然后我们在配置文件中定义用户名与密码:

    shell.auth.simple.user.name: root
    shell.auth.simple.user.password: root
    

    剩下的我们可以使用groovy写一个获取spring 容器中Bean的脚本

    package crash.commands
    
    import org.crsh.cli.Command
    import org.crsh.cli.Option
    import org.crsh.cli.Usage
    import org.springframework.beans.factory.support.DefaultListableBeanFactory
    
    class yd {
        @Usage("get bean from context")
        @Command
        Object get(@Option(names = ["n", "beanName"]) String beanName) {
            def attrs = (DefaultListableBeanFactory) context.attributes["spring.beanfactory"];
            if (beanName != null && !"".equals(beanName.trim())) {
                return attrs.getBean(beanName)
            }
            return null;
        }
    }
    

    这个脚本放置的位置一般情况下放到resources/commands目录下,因为在jar包中定义了脚本扫描的路径。我们就算配置好了,下面我们需要启动项目,启动成功后,打开shell界面,输入

    ssh -p 2000 root@localhost
    

    密码我们设置的也是

    root
    

    登录进来后的界面是

      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::  (v1.3.5.RELEASE) on oliferdeMacBook-Pro.local
    

    进来后输入

    repl groovy
    

    进入groovy的操作模式,因为我们是使用groovy写的脚本,只有在这种模式下,脚本才能运行。

    (yd.get{n='applicationMain'}|{t->t})()
    

    返回值

    com.shuqi.ApplicationMain$$EnhancerBySpringCGLIB$$97a5b16d@698e1763
    

    说明我们已经获取到了这个Bean,然后我们可以操作这个Bean里面的方法来完成某些功能。这个真的是非常实用的。大家玩起来吧

    下节将的内容是:SpringBoot基础教程(八)——与velocity的结合

    本节项目源码

    相关文章

      网友评论

        本文标题:SpringBoot基础教程(七)——与remote shell

        本文链接:https://www.haomeiwen.com/subject/bisqcftx.html