7.4通过CRaSH管理Spring Boot和定义远程命令
7.4.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' |
- 接着我们开启我们的应用,然后执行SSH命令:ssh -p 2000 user@localhost
- 输入密码之后,我们可以看到日志输出:
Using default password for shell access: 40c50992-ab6b-45f4-b17cf8c8e5e94677
- 如果密码是正确的,我们可以看到如下的信息:
- 接下来,我们执行命令: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}} |
- 如果输入help,你可以看到所有可执行的命令,然后继续添加我们自己CRaSH的命令,这样有能力添加新的发布都到我们的系统中。
- 在src/main/resources下创建我们新的文件夹命名为commands.
- 添加文件名称为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 } } |
- 命令创建之后,现在我们开启我们的应用,然后执行SSH命令:ssh -p 2000 user@localhost
- 我们输入publishers, 我们可以看到如下的信息:
- 让我们添加一具publisher,执行命令是:publishers add --name "Fictitious Books" 。之后,我们可以看到这样的输出:Added new publisher 2 -> Fictitious Books
- 如果我们输出publishers list, 我们会看到所有的列表:
- 远程的命令是:publishers remove --id 2,之后你会看到信息是:Removed publisher 2
- 确认我们的publisher已经在运行了,所以我们执行publishers list可以看到如下的信息:
Available Publishers: id -> name |
7.4通过CRaSH管理Spring Boot和定义远程命令相关推荐
- Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI
作为微服务开发的一部分,我们许多人都将Spring Boot与Spring Cloud功能一起使用. 在微服务领域,我们将有许多Spring Boot应用程序将在相同/不同的主机上运行. 如果将Spr ...
- 惊呆了!Spring Boot 还能远程调试?
目录 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启远程调试? transport server suspend address onthrow onuncaught laun ...
- 使用Cloud Studio在线编写、调试和管理Spring Boot应用
在之前的<Spring Boot基础教程>中,我们介绍了通过Spring官方的构建页面来生成项目,也介绍了通过使用Intellij中的Spring Initializr来快速构建Sprin ...
- Spring Boot应用的启动和停止(Spring Boot应用通过start命令启动)
Spring Boot,作为Spring框架对"约定优先于配置(Convention Over Configuration)"理念的最佳实践的产物,它能帮助我们很快捷的创建出独立运 ...
- Docker——IDEA部署Spring Boot项目到远程Docker解决方案
环境配置 IntelliJ IDEA 2021.3 CentOS 7 Docker 20.10.3 解决方案 安装Docker 官方文档:https://docs.docker.com/engine/ ...
- Spring Boot(7)---构建系统和依赖管理
Spring Boot的使用:构建系统和依赖管理 13. 构建系统 强烈建议你选择一个支持依赖管理,能消费发布到"Maven中央仓库"的artifacts的构建系统,比如Maven ...
- Spring Boot缓存管理
Spring Boot缓存管理 Spring Boot默认缓存管理 基础环境搭建 Spring Boot默认缓存体验 Spring Boot缓存注解介绍 @EnableCaching注解 @Cache ...
- 【译】Spring Boot 2.0 官方迁移指南
前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0. 在你开始之前 首先,Spring Boot 2.0 需要 Java 8 或更高版本.不再支持 Java 6 和 7 了. 在 ...
- Spring Boot 2.0 迁移指南
点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 前提 本文档将帮助您把应用程序迁移到 Spring ...
- Spring Boot中文文档
1.5.2.RELEASE Part I. Spring Boot 文档 本节简要介绍了Spring Boot文档,是整个文档的参考指南. 您可以完整阅读本参考指南,或者如果您不感兴趣的话可以跳过该部 ...
最新文章
- 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图
- java mysql数据库封装_java-jdbc封装连接数据库工具
- 添加触发器后自增ID会变
- html与css项目,项目六HTML与CSS基础.doc
- 20180315 代码错题(1)
- 关于Linux系统下在使用close关闭串口设备时引起的内核崩溃问题解决方法
- s5pv210——中断实战
- spring各个jar包作用
- [CQOI2009][BZOJ1303] 中位数图
- 小菜找实习——阿里3月20日笔试第二题
- Android源码网站
- java heapdump 分析工具_Java Heap dump文件分析工具jhat简介
- html插入视频快捷键代码,pr添加关键帧的快捷键是什么?
- 合并两个有序表(C语言)
- CTEX 各种命令、符号
- android botton控件基本属性
- 早上空腹喝酸奶好吗?
- python取省边界_提取行政区边界经纬度坐标(高德+百度)
- 追求成功三要诀 文 | 刘东华
- 打开小程序之门,“拉勾”之约