我正在使用 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 的记录方式一体化。
所以我怀疑这里有一些比赛条件或其他什么,但我无法准确指出这里发生了什么。
有没有人遇到过这样的问题?有解决方法吗?