Spring Boot应用程序+ Jolokia - 启动期间的异常

时间:2017-12-27 15:19:04

标签: java spring spring-boot jolokia

我使用的是Spring Boot 1.5.3.RELEASE和Jolokia 1.3.6(也适用于以后的版本)。

通过添加依赖项来集成Jolokia:

 <dependency>
     <groupId>org.jolokia</groupId>
     <artifactId>jolokia-core</artifactId>
 </dependency>

我们的所有共享相同架构的微服务都无法启动,我在启动过程中看到了以下根本原因的异常:

Caused by: java.io.FileNotFoundException: JAR entry BOOT-INF/lib/jolokia-core-1.3.7.jar!/META-INF/simplifiers-default not found in <MY_JAR_NAME_GOES_HERE>.jar
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:142)
    at sun.net.www.protocol.jar.JarURLConnection.getInputStream (JarURLConnection.java:150)
    at java.net.URL.openStream(URL.java:1045)
    at org.jolokia.util.ServiceObjectFactory.readServiceDefinitionFromUrl(ServiceObjectFactory.java:90)

当我从IDE启动应用程序时,只有当我从java -jar <MY_JAR>开始时,才会发生此异常。

我查看了在Jolokia代码中产生异常的行,它看起来像这样:

reader = new LineNumberReader(new InputStreamReader(new URL(pUrl).openStream(),"UTF8"));

所以我总结(在调试之后)new URL(pUrl).openStream()无法找到上述异常堆栈跟踪中指定的jar条目。我也明白在IDE中它并不会发生,因为它适用于不同的类加载器(Spring Boot应用程序使用LaunchedURLClassLoader)。

但是,我没有在源代码中看到一个错误:我们有很多微服务,都运行相同的配置并且按预期工作,此外,据我所知这是Jolokia集成的记录方式。

所以我怀疑这里有一些竞争条件,但我无法确切地指出这里发生了什么。

有人遇到过这样的问题吗?有解决方法吗?

2 个答案:

答案 0 :(得分:2)

我遇到了完全一样的异常。在我的情况下,问题在于文件名具有一个+(我正在使用reckon Gradle插件来生成项目版本)。解决方案是在使用java -jar运行文件之前重命名该文件。

答案 1 :(得分:1)

使用Spring Boot 1.5.22和jolokia的默认版本时,我面临着同样的问题。

我有另一个没有问题的应用程序(相同版本的SpringBoot,jolokia)...我发现这两个应用程序之间没有任何区别...

但是我已经使用了这种解决方法:指示Spring Boot提取jolokia jar,以跳过仅用于jolokia jar的Spring boot嵌套jar URL过程。

bgcolor-171721

请参阅https://docs.spring.io/spring-boot/docs/1.5.x/reference/htmlsingle/#howto-extract-specific-libraries-when-an-executable-jar-runs

通过这种解决方法,jolokia感到很高兴, / jolokia 端点可用,并且Spring Boot Admin jmx选项卡处于活动状态。