shell - spring-boot 在 java 中向 actuatorshell 添加自定义命令

标签 shell spring-boot

我正在尝试在 spring-boot 应用程序中向 spring-actuator 的 ssh 远程 shell 添加 java 命令。 spring-boot 版本为 1.2.3.RELEASE。

我的示例命令刚刚命名为“kafka”,我尝试将它放在/crash/commands 和/commands 的类路径中。它从未被发现 - 它没有出现在帮助中或实际工作。

有什么方法可以让远程 shell 告诉我它在启动时扫描/查找的内容吗?

我尝试过的事情包括特别覆盖 shell.commandPathPatterns,尽管默认值似乎应该覆盖它。

我的命令 - 用于测试 - 非常简单:

package commands;
@Usage("Kafka utility commands")
public class kafka extends BaseCommand {

    @Command
    public Object main(InvocationContext<ObjectName> context) {
       return "it's all good";
    }
}

最佳答案

经过一小时的调试,我发现 CRaSH 远程 shell 在包中查找扩展名为 .groovy.java 的文件是 commands crash.commands。找到的文件被编译为字节码,忽略编译器错误。

我假设您使用 Maven 之类的工具。当您将命令放入 src/main/java 时,Maven 会将其编译为 .class 文件,而 CRaSH 将找不到它。当您将命令放入 src/main/resources 时,Maven 不会编译它,而是将其保存为 .java 文件。

解决方案(这对我来说很奇怪)是将您的 java 命令文件放入 src/main/resources(package commandscrash.commands),这样您在目标目录或 JAR 中有一个 .java 源文件。

我用 spring-boot 1.2.1.RELEASE (crash.shell: 1.3.0) 测试了它,它应该与 1.2.3.RELEASE (crash.shell: 1.3.1) 没有太大区别。

关于shell - spring-boot 在 java 中向 actuatorshell 添加自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29442874/

相关文章:

java - 在不同的 jdk 版本中运行 spring boot 应用程序

spring-boot - Spring Webflux 和 @Cacheable - 缓存 Mono/Flux 类型结果的正确方法

shell - 目录名称中带有空格的命令行选项解析器

java - 如何扫描用户输入以确认执行 DELETE 操作

linux - Bash:tail 的语法高亮显示(使用 awk)

shell - 从 Shell 脚本/bin/sh 运行 FFMPEG

tomcat - 多部分异常 - Spring Boot 中的 maxPostSize 错误

java - Spring Boot 分段上传获取空文件对象

linux - BASH 自动给字符串加上引号

java - bash脚本提取jar文件并复制路径