Spring 启动应用程序 + Jolokia - 启动期间出现异常
Spring Boot application + Jolokia - exception during startup
我正在使用 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 引导应用程序使用 LaunchedURLClassLoader
)。
但是,我在源代码中没有看到错误:我们有很多微服务,都是 运行 相同的配置,并且按预期工作,此外,据我所知知道这是 Jolokia 集成的记录方式。
所以我怀疑这里存在一些竞争条件或其他问题,但我不能真正指出这里到底发生了什么。
有人遇到过这样的问题吗?有解决方法吗?
我遇到了完全相同的异常。我的问题是文件名有一个 +
(我正在使用 reckon Gradle 插件来生成项目版本)。解决方案是在 运行 之前将文件重命名为 java -jar
。
我遇到了同样的问题,Spring Boot 1.5.22 和默认版本的 jolokia。
我有另一个应用程序(SpringBoot、jolokia 的相同版本)没有问题...我没有发现这两个应用程序之间有任何区别...
但我已经使用了该解决方法:指示 Spring 启动以提取 jolokia jar 以跳过 Spring 启动嵌套 jar url 仅用于 jolokia jar 的过程。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<artifactId>jolokia-core</artifactId>
<groupId>org.jolokia</groupId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
有了这个解决方法,jolokia 很高兴,/jolokia 端点可用并且 Spring Boot Admin jmx 选项卡处于活动状态。
我正在使用 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 引导应用程序使用 LaunchedURLClassLoader
)。
但是,我在源代码中没有看到错误:我们有很多微服务,都是 运行 相同的配置,并且按预期工作,此外,据我所知知道这是 Jolokia 集成的记录方式。
所以我怀疑这里存在一些竞争条件或其他问题,但我不能真正指出这里到底发生了什么。
有人遇到过这样的问题吗?有解决方法吗?
我遇到了完全相同的异常。我的问题是文件名有一个 +
(我正在使用 reckon Gradle 插件来生成项目版本)。解决方案是在 运行 之前将文件重命名为 java -jar
。
我遇到了同样的问题,Spring Boot 1.5.22 和默认版本的 jolokia。
我有另一个应用程序(SpringBoot、jolokia 的相同版本)没有问题...我没有发现这两个应用程序之间有任何区别...
但我已经使用了该解决方法:指示 Spring 启动以提取 jolokia jar 以跳过 Spring 启动嵌套 jar url 仅用于 jolokia jar 的过程。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<artifactId>jolokia-core</artifactId>
<groupId>org.jolokia</groupId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
有了这个解决方法,jolokia 很高兴,/jolokia 端点可用并且 Spring Boot Admin jmx 选项卡处于活动状态。