Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring boot附加崩溃命令_Java_Spring Boot_Spring Boot Actuator_Crash Shell - Fatal编程技术网

Java Spring boot附加崩溃命令

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

根据,在使用基于崩溃的远程shell时,可以定义额外的命令

这些命令的默认位置为classpath*:/commands/,classpath*:/crash/commands/

属性可用于替代默认位置,但在提供的示例中,自定义命令位于资源中

在我看来,自定义命令(至少是java命令)不应该位于参考资料中,而应该位于src/main/java中


在参考资料中定义自定义路径时效果很好,但是如何在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