50. 使用远程 Shell 进行监视和 Management(不建议使用)
Spring Boot 支持称为“ CRaSH”的集成 Java Shell。您可以使用 CRaSH ssh
或telnet
进入正在运行的应用程序。要启用远程 Shell 程序支持,请将以下依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-remote-shell</artifactId>
</dependency>
Note
远程 Shell 已弃用,并将在 Spring Boot 2.0 中删除。
Tip
如果您还希望启用 telnet 访问,则还需要依赖org.crsh:crsh.shell.telnet
。
Note
CRaSH 需要与 JDK 一起运行,因为它需要即时编译命令。如果基本的help
命令失败,则您可能正在使用 JRE 运行。
50.1 连接到远程 Shell
默认情况下,远程 Shell 程序将监听端口2000
上的连接。默认用户为user
,默认密码将随机生成并显示在日志输出中。如果您的应用程序使用的是 Spring Security,则默认情况下 Shell 将使用相同的配置。如果没有,将应用简单的身份验证,您应该看到如下消息:
Using default password for shell access: ec03e16c-4cf4-49ee-b745-7c8255c1dd7e
Linux 和 OSX 用户可以使用ssh
连接到远程 Shell,Windows 用户可以下载并安装PuTTY。
$ ssh -p 2000 [emailprotected]
[emailprotected]'s password:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE) on myhost
键入help
以获取命令列表。 Spring Boot 提供了metrics
,beans
,autoconfig
和endpoint
命令。
50.1.1 远程 Shell 凭据
您可以使用management.shell.auth.simple.user.name
和management.shell.auth.simple.user.password
属性来配置自定义连接凭据。也可以使用“ Spring Security” AuthenticationManager
来处理登录职责。有关完整的详细信息,请参见CrshAutoConfiguration和ShellProperties Javadoc。
50.2 扩展远程 Shell
可以通过许多有趣的方式扩展远程 Shell。
50.2.1 远程 Shell 命令
您可以使用 Groovy 编写其他 Shell 命令(有关详细信息,请参见 CRaSH 文档)。由于 CRaSH 的 Java 编译器的限制,因此不支持用 Java 编写的命令。默认情况下,Spring Boot 将在以下位置搜索命令:
-
classpath*:/commands/**
-
classpath*:/crash/commands/**
Tip
您可以通过设置shell.command-path-patterns
属性来更改搜索路径。
Note
如果使用的是可执行归档文件,那么 shell 命令依赖的任何类都必须打包在嵌套 jar 中,而不是直接打包在可执行 jar 或 war 中。
这是一个简单的“ hello”命令,可以从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")
@Command
def main(InvocationContext context) {
return "Hello"
}
}
Spring Boot 向InvocationContext
添加了一些其他属性,您可以从命令中访问它们:
Attribute Name | Description |
---|---|
spring.boot.version | Spring Boot 的版本 |
spring.version | 核心 Spring 框架的版本 |
spring.beanfactory | 进入 SpringBeanFactory |
spring.environment | 进入 SpringEnvironment |
50.2.2 远程 Shell 插件
除了新命令,还可以扩展其他 CRaSH Shell 功能。所有扩展为org.crsh.plugin.CRaSHPlugin
的 Spring Bean 都会自动在 shell 中注册。
有关更多信息,请参阅CRaSH 参考文档。