Spring Boot实战(十一)应用监控 11.3 SSH

我们还可以通过SSH或TELNET监控和管理我们的应用,这一点Spring Boot是借助CraSH(http://www.crashub.org)来实现的。在应用中,我们只需在Spring Boot项目中添加spring-boot-starter-remote-shell依赖即可。

11.3.1 新建Spring Boot项目

新建Spring Boot项目,依赖为Remote Shell(spring-boot-starter-remote-shell)。
项目信息:

groupId:com.wisely
arctifactId:ch11_3
package:com.wisely.ch11_3

11.3.2 运行

启动程序,此时控制台会提示SSH访问的密码,如图
在这里插入图片描述
这样就可以通过下面信息登录我们的程序(SSH客户端可使用puTTY、SecureCRT等),登录界面如图

主机:localhost
端口:2000
账号:user
密码:上面截图

在这里插入图片描述
登录后的效果如图
在这里插入图片描述

11.3.3 常用命令

(1)help

输入help命令,获得命令列表,如图
在这里插入图片描述

(2)metrics

输入metrics命令,效果如图
在这里插入图片描述

(3)endpoint

输入下面命令获得端点列表,如图

endpoint list

在这里插入图片描述
调用某一个端点,如调用health,如图

endpoint invoke health

在这里插入图片描述

11.3.4 定制登录用户

我们可以通过在application.properties下定制下面的属性,实现用户的账号密码的定制:

shell.auth.simple.user.name=lmz
shell.auth.simple.user.password=lmz

11.3.5 扩展命令

可以在spring-boot-starter-remote-shell.jar中看到Spring Boot为我们定制的命令,如图
在这里插入图片描述
如beans.groovy的代码为:

package commands

import org.springframework.boot.actuate.endpoint.BeansEndpoint

class beans {

	@Usage("Display beans in ApplicationContext")
	@Command
	def main(InvocationContext context) {
		def result = [:]
		context.attributes['spring.beanfactory'].getBeansOfType(BeansEndpoint.class).each { name, endpoint ->
			result.put(name, endpoint.invoke())
		}
		result.size() == 1 ? result.values()[0] : result
	}

}

需要特别指出的是,这里使用了Groovy语言来编制命令,Groovy语言是由Spring主导的运行于JVM的动态语言,是可以替代java作为开发语言的。在这里还需说明的是,Spring Boot即可以用Java语言开发,也可以用Groovy语言开发,本文为了减少学习曲线,以及考虑绝大数读者的使用现状,所以没有对Groovy语言及Groovy开发Spring进行介绍,读者如有兴趣可自行学习Groovy。
另一个值得注意的是InvocationContext,我们可以通过InvocationContext获得下表所示的属性。

属性名描述
spring.boot.versionSpring Boot 的版本
spring.versionSpring框架的版本
spring.beanfactory访问Spring的BeanFactory
spring.enviroment访问Spring的Enviroment

这里将以Groovy语言演示一个命令的定制,命令可以放在以下目录,Spring Boot会自动扫描:

classpath*:/commands/**
classpah*:/crash/commands/**

在src/main/resources下新建commands文件夹,新建hello.groovy,内容如下:

package commands
import org.crsh.cli.Command
import org.crsh.cli.Usage
import org.crsh.command.InvocationContext
class hello{
	@Usage("Say Hello") //使用@Usage注解解释该命令的用途。
	@Command      //使用@Command注解当前是一个CRaSH命令
	def main(InvocationContext context) {
	
		def bootVersion = context.attributes['spring.boot.version']; //获得Spring Boot的版本,注意Groovy的方法和变量声明关键字为def
		def springVersion = context.attributes['spring.version']  //获得Spring框架的版本
		
		return "Hello,your Spring Boot version is "+bootVersion +",your Spring Framework version is "+springVersion   //返回命令执行结果
		
	}
}

运行
此时我们运行程序,并以SSH客户端登录,输入hello命令,可获得如图所示结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值