Java Spring boot附加崩溃命令
根据,在使用基于崩溃的远程shell时,可以定义额外的命令 这些命令的默认位置为classpath*:/commands/,classpath*:/crash/commands/ 属性可用于替代默认位置,但在提供的示例中,自定义命令位于资源中 在我看来,自定义命令(至少是java命令)不应该位于参考资料中,而应该位于src/main/java中Java Spring boot附加崩溃命令,java,spring-boot,spring-boot-actuator,crash-shell,Java,Spring Boot,Spring Boot Actuator,Crash Shell,根据,在使用基于崩溃的远程shell时,可以定义额外的命令 这些命令的默认位置为classpath*:/commands/,classpath*:/crash/commands/ 属性可用于替代默认位置,但在提供的示例中,自定义命令位于资源中 在我看来,自定义命令(至少是java命令)不应该位于参考资料中,而应该位于src/main/java中 在参考资料中定义自定义路径时效果很好,但是如何在src/main/java中定义自定义路径呢?现在还没找到办法 您可以尝试将命令放在src/main/r
在参考资料中定义自定义路径时效果很好,但是如何在src/main/java中定义自定义路径呢?现在还没找到办法 您可以尝试将命令放在
src/main/resources/commands/
下,如果它们在src/main/java
下,它们将自动编译,这不是您需要的。我的解决方案是将该目录模拟为资源文件夹,简言之,转换为:
org.apache.maven.plugins
maven编译器插件
3.3
${java.version}
${java.version}
崩溃/命令/*
src/main/java/crash/commands
崩溃/命令
假的
次要更新和免责声明:
您可能已经知道,在登录/注销时会执行几个闭包。至少对于我盲目从spring boot继承的v1.3.1,它将选择在类路径中找到的第一个login.groovy
。我的项目工件与所有其他依赖项一起打包在RPM中。由于它的名字以r
开头,它位于默认值所在的crash.shell-1.3.1.jar
之后,因此我不得不进行以下小技巧,让它选择我自己的脚本,而不是默认脚本:
<!-- hack to make CRaSH pick up login.groovy from our jar instead of the default one -->
<finalName>0_${project.artifactId}-${project.version}</finalName>
0{project.artifactId}-${project.version}
我就是这么做的,但问题是,如何在src/main/java中指定路径?“它们将自动编译,这不是您所需要的。”为什么会出现这个问题?当op需要java时,您提到groovy。@Xenothercide 1)嗯,如果我正确地重述,CRaSH会查找并编译命令源本身。如果它们已经被编译过,它将找不到它们。2)命令可以在java或groovy中实现,但在登录/注销时执行的命令只是groovy闭包,而这两个命令是groovy的唯一引用。我遗漏了什么吗?可能没有,只是不太清楚为什么CRaSH认为它必须自己编译东西。我的意思是,我开始在运行时使用groovy,但是为什么它必须能够编译Java,这对于崩溃开发人员来说可能是一个更好的问题。@Xenotracide原因之一是为了方便开发,因为您可以在运行时编写它们,它将立即接收您的更改。另一个可能是,它做了某种仪器,但这只是一个假设,我还没有查看来源。另外,你可能已经注意到了,但是如果你没有注意到,我也回复了你在关于SpringAccess的问题中添加的评论。干杯,我知道他们可能在做一些事情,但所有这些事情都可以通过其他方式完成,而不是自己编译源代码。不得不做这些事情有点让人恼火。我并不是说他们不应该这样做,他们应该允许我们不这样做,我正在讨论是否要提交一个bug,但我实际上没有一个直接的用例,我只是在Spring Boot演示中演示这项技术。我也想知道这一点,因为我想发出可以访问Spring上下文的命令,当然还有我的类路径上的其他类。@Xenotracide目前还没有那么明确,但是这条语句对我来说是一个很好的起点defbean=context.attributes.bean[“TheBean”]代码>。我在Java中所做的是扩展org.crsh.command.BaseCommand
,并创建了我的方法protectedt getSpringBean(类beanClass)
,它只返回((BeanCfactory)this.context.getAttributes().get(“spring.BeanCfactory”).getBeanClass代码>