Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 ActiveMQ嵌入式代理,关闭挂钩中出现异常_Java_Spring_Jms_Activemq - Fatal编程技术网

Java ActiveMQ嵌入式代理,关闭挂钩中出现异常

Java ActiveMQ嵌入式代理,关闭挂钩中出现异常,java,spring,jms,activemq,Java,Spring,Jms,Activemq,我使用嵌入式代理在关机时出现以下错误: Exception in thread "ActiveMQ ShutdownHook" java.lang.NoClassDefFoundError: org/apache/activemq/broker/BrokerService 我有没有可能弄错了什么?我在这里使用了activemq页面上详细说明的配置: (底部标有“使用spring-2.0”的配置)。消息正在正确传递等。因此,我不确定此错误是否无害。这是一个旧问题,在嵌入ActiveMQ且未10

我使用嵌入式代理在关机时出现以下错误:

Exception in thread "ActiveMQ ShutdownHook" java.lang.NoClassDefFoundError: org/apache/activemq/broker/BrokerService
我有没有可能弄错了什么?我在这里使用了activemq页面上详细说明的配置:


(底部标有“使用spring-2.0”的配置)。消息正在正确传递等。因此,我不确定此错误是否无害。

这是一个旧问题,在嵌入ActiveMQ且未100%正确配置时可能会发生。链接的配置中唯一遗漏的是将
useShutdownHook=“false”
添加到XML配置的
元素中。下面是一个简单的例子:

<amq:broker useJmx="false" persistent="false" useShutdownHook="false">
...
</amq:broker>

...

这将禁用关机挂钩并防止此问题发生

实际上,我会让关闭挂钩保持启用状态,但必须在正确的位置定义它。有些人实施它是有原因的;)

我不知道您有什么类型的部署,但让我们假设web应用程序。在这种情况下,您应该在
web.xml
中将shutdownhook注册为。在这种情况下,它将在web应用程序关闭期间被触发,此时classpath包含所有ActiveMQ类,它将按预期工作

在web应用程序的情况下,在JVM上注册关闭钩子可能会有问题。关闭期间的Web容器(tomcat)将首先停止Web应用程序,然后执行JVM关闭挂钩

ActiveMQ注册自定义线程,这些线程将在web应用程序停止后继续运行,但它们将无法从此web应用程序访问类(因为它已被销毁),因此您将获得
NoClassDefFoundError


还有一件事:也许你可以禁用关机挂钩。如果您正在将ActiveMQ作为Spring bean加载,并且正在从
web.xml
(Spring web上下文)加载Spring上下文,则Spring将自动注册挂钩并正确关闭AcrtiveMQ bean。

完成集成测试后,您可以停止ActiveMQ实例。只需在pom中添加以下行

 <execution>
    <id>stop-activemq</id>
    <goals>
        <goal>stop</goal>
    </goals>
    <phase>post-integration-test</phase>
</execution>

停止activemq
停止
整合后测试