7.4.1代码实现

  1. 首先,我们需要添加CRaSH需要的依赖包:

implementation 'org.jolokia:jolokia-core:+'

implementation 'org.springframework.boot:spring-boot-starter-actuator'

implementation 'org.springframework.boot:spring-boot-starter-remoteshell'

implementation 'org.crashub:crash.connectors.telnet:1.3.1'

implementation 'de.codecentric:spring-boot-admin-starter-client:1.2.1'

  1. 接着我们开启我们的应用,然后执行SSH命令:ssh -p 2000 user@localhost
  2. 输入密码之后,我们可以看到日志输出:

Using default password for shell access: 40c50992-ab6b-45f4-b17cf8c8e5e94677

  1. 如果密码是正确的,我们可以看到如下的信息:

  1. 接下来,我们执行命令:endpoint invoke healthEndpoint,会看到如下的信息输出:

{status=UP, dbCount={status=UP, PublisherRepository={status=UP,

count=1}, ReviewerRepository={status=UP, count=0}, AuthorRepository=

{status=UP, count=1}, BookRepository={status=UP, count=1}}, diskSpace=

{status=UP, total=249804886016, free=2491744256, threshold=10485760},

db={status=UP, database=H2, hello=1}}

  1. 如果输入help,你可以看到所有可执行的命令,然后继续添加我们自己CRaSH的命令,这样有能力添加新的发布都到我们的系统中。
  2. 在src/main/resources下创建我们新的文件夹命名为commands.
  3. 添加文件名称为publishers.groovy在src/main/resources/commands文件下。添加内容如下:

package commands

import org.crsh.cli.Option

import org.crsh.cli.Usage

import org.crsh.cli.Command

import org.crsh.command.InvocationContext

import org.springframework.beans.factory.BeanFactory

import org.test.bookpub.entity.Publisher

import org.test.bookpub.repository.PublisherRepository

@Usage("Publisher management")

class publishers {

@Usage("Lists all publishers")

@Command

def list(InvocationContext context) {

PublisherRepository repository =

getPublisherRepository(context)

if (repository) {

repository.findAll().each{publisher ->

context.provide([id:publisher.id, name:publisher.name])

}

} else {

return "PublisherRepository is not found!"

}

}

@Usage("Add new publisher")

@Command

def add(@Usage("publisher name") @Option(names=["n","name"]) String

name, InvocationContext context) {

PublisherRepository repository =

getPublisherRepository(context)

if (repository) {

publisher = new Publisher(name)

try {

publisher = repository.save(publisher)

return "Added new publisher ${publisher.id} ->

${publisher.name}"

} catch (Exception e) {

return "Unable to add new publisher named

${name}\n${e.getMessage()}"

}

} else {

return "PublisherRepository is not found!"

}

}

@Usage("Remove existing publisher")

@Command

def remove(@Usage("publisher id") @Option(names=["i","id"]) String

id, InvocationContext context) {

PublisherRepository repository =

getPublisherRepository(context)

if (repository) {

try {repository.delete(Long.parseLong(id))

return "Removed publisher ${id}"

} catch (Exception e) {

return "Unable to remove publisher with id

${id}\n${e.getMessage()}"

}

} else {

return "PublisherRepository is not found!"

}

}

def getPublisherRepository(InvocationContext context) {

BeanFactory bf =

context.getAttributes().get("spring.beanfactory")

PublisherRepository repository =

bf.getBean(PublisherRepository)

return repository

}

}

  1. 命令创建之后,现在我们开启我们的应用,然后执行SSH命令:ssh -p 2000 user@localhost
  2. 我们输入publishers, 我们可以看到如下的信息:

  1. 让我们添加一具publisher,执行命令是:publishers add --name "Fictitious Books" 。之后,我们可以看到这样的输出:Added new publisher 2 -> Fictitious Books
  2. 如果我们输出publishers list, 我们会看到所有的列表:

  1. 远程的命令是:publishers remove --id 2,之后你会看到信息是:Removed publisher 2
  2. 确认我们的publisher已经在运行了,所以我们执行publishers list可以看到如下的信息:

Available Publishers: id -> name
1 -> Packt

7.4通过CRaSH管理Spring Boot和定义远程命令相关推荐

  1. Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI

    作为微服务开发的一部分,我们许多人都将Spring Boot与Spring Cloud功能一起使用. 在微服务领域,我们将有许多Spring Boot应用程序将在相同/不同的主机上运行. 如果将Spr ...

  2. 惊呆了!Spring Boot 还能远程调试?

    目录 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启远程调试? transport server suspend address onthrow onuncaught laun ...

  3. 使用Cloud Studio在线编写、调试和管理Spring Boot应用

    在之前的<Spring Boot基础教程>中,我们介绍了通过Spring官方的构建页面来生成项目,也介绍了通过使用Intellij中的Spring Initializr来快速构建Sprin ...

  4. Spring Boot应用的启动和停止(Spring Boot应用通过start命令启动)

    Spring Boot,作为Spring框架对"约定优先于配置(Convention Over Configuration)"理念的最佳实践的产物,它能帮助我们很快捷的创建出独立运 ...

  5. Docker——IDEA部署Spring Boot项目到远程Docker解决方案

    环境配置 IntelliJ IDEA 2021.3 CentOS 7 Docker 20.10.3 解决方案 安装Docker 官方文档:https://docs.docker.com/engine/ ...

  6. Spring Boot(7)---构建系统和依赖管理

    Spring Boot的使用:构建系统和依赖管理 13. 构建系统 强烈建议你选择一个支持依赖管理,能消费发布到"Maven中央仓库"的artifacts的构建系统,比如Maven ...

  7. Spring Boot缓存管理

    Spring Boot缓存管理 Spring Boot默认缓存管理 基础环境搭建 Spring Boot默认缓存体验 Spring Boot缓存注解介绍 @EnableCaching注解 @Cache ...

  8. 【译】Spring Boot 2.0 官方迁移指南

    前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0. 在你开始之前 首先,Spring Boot 2.0 需要 Java 8 或更高版本.不再支持 Java 6 和 7 了. 在 ...

  9. Spring Boot 2.0 迁移指南

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 前提 本文档将帮助您把应用程序迁移到 Spring ...

  10. Spring Boot中文文档

    1.5.2.RELEASE Part I. Spring Boot 文档 本节简要介绍了Spring Boot文档,是整个文档的参考指南. 您可以完整阅读本参考指南,或者如果您不感兴趣的话可以跳过该部 ...

最新文章

  1. 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图
  2. java mysql数据库封装_java-jdbc封装连接数据库工具
  3. 添加触发器后自增ID会变
  4. html与css项目,项目六HTML与CSS基础.doc
  5. 20180315 代码错题(1)
  6. 关于Linux系统下在使用close关闭串口设备时引起的内核崩溃问题解决方法
  7. s5pv210——中断实战
  8. spring各个jar包作用
  9. [CQOI2009][BZOJ1303] 中位数图
  10. 小菜找实习——阿里3月20日笔试第二题
  11. Android源码网站
  12. java heapdump 分析工具_Java Heap dump文件分析工具jhat简介
  13. html插入视频快捷键代码,pr添加关键帧的快捷键是什么?
  14. 合并两个有序表(C语言)
  15. CTEX 各种命令、符号
  16. android botton控件基本属性
  17. 早上空腹喝酸奶好吗?
  18. python取省边界_提取行政区边界经纬度坐标(高德+百度)
  19. 追求成功三要诀 文 | 刘东华
  20. 打开小程序之门,“拉勾”之约

热门文章

  1. Nginx负载均衡与反向代理——基础功能
  2. 四、kafka整体架构
  3. 转浅谈缓存击穿、缓存并发和缓存失效
  4. 系统报 “client没有所需的特权” 的解决方法
  5. 升级nodeJS中的npm版本
  6. 复杂链表的复制(C++解法)
  7. 使用CocosStudioV3.10场景导入Cocos2d-xV3.17.2
  8. VXLAN详解(三)
  9. Subversion使用手記
  10. lvm 的用法和小案例