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

时间:2015-04-04 04:55:53

标签: shell spring-boot

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

我的示例命令名为'kafka',我尝试将它放在/ crash /命令以及/ 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";
    }
}

1 个答案:

答案 0 :(得分:4)

经过一个小时的调试后,我发现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)的差别不大。