7.4通过CRaSH管理Spring Boot和定义远程命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值