我正在尝试在 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 commands
或 crash.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/