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

spring-boot adding a custom command to actuatorshell in java

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

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

有什么方法可以让遥控器 shell 在启动时告诉我它是什么 scanning/finding 吗?

我尝试过的事情包括特别覆盖 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 的文件是 commandscrash.commands。找到的文件被编译为字节码,忽略编译器错误。

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

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

我用 spring-boot 1.2.1.RELEASE (crash.shell: 1.3.0) 测试了它,应该和 1.2.3.RELEASE (crash.shell: 1.3.1).