Приложение весенней загрузки + jolokia - исключение при запуске

Я использую весеннюю загрузку 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 интеграция.

Поэтому я подозреваю, что здесь какое-то состояние гонки или что-то в этом роде, но я действительно могу точно указать, что здесь происходит.

Кто-нибудь сталкивался с такой проблемой? Есть ли обходной путь?

Заранее спасибо.

1 ответ

Я получал точно такое же исключение. Проблема в моем случае заключалась в том, что имя файла + (Я использую плагин Reckon Gradle для создания версии проекта). Решением было переименовать файл перед запуском java -jar,

Я столкнулся с той же проблемой с Spring Boot 1.5.22 и версией jolokia по умолчанию.

У меня есть другое приложение (та же версия SpringBoot, jolokia), в котором не было проблемы... Я не нашел никаких различий между двумя приложениями...

Но у меня есть обходной путь: проинструктируйте Spring Boot извлечь jolokia jar, чтобы пропустить процесс загрузки вложенного URL-адреса Spring boot только для 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>

см. https://docs.spring.io/spring-boot/docs/1.5.x/reference/htmlsingle/

Благодаря этому обходному пути jolokia довольна, конечная точка / jolokia доступна, а вкладка Spring Boot Admin jmx активна.

Другие вопросы по тегам