0

Я работаю над приложением и развертываю в облачном литейном цехе. Внутри он имеет 3 пользовательских зависимостей, разработанных нашей командой.Как создать неиспользуемую библиотеку (jar), используя весеннюю загрузку?

Все 3 зависимости - это проект загрузки и их @Configuration.

  • Зависимость 1 заключается в взаимодействии с Couchbase. Источником этой зависимости является загрузочный проект.
  • Зависимость 2 заключается в взаимодействии с FluentD для ведения журнала. Источником этой зависимости является загрузочный проект.
  • Зависимость 3 заключается в взаимодействии с внешним сервисом отдыха. Источником этой зависимости является загрузочный проект.
  • Зависимость 4 имеет все эти 3 зависимости и также имеет несколько классов и констант utils.

Я использую эту зависимость 4 в нескольких веб-приложениях, которые имеют реализацию WebMVC.

Все работает нормально на моей локальной машине. Но когда я нажимаю это веб-приложение на облаке, иногда библиотеки запускаются перед веб-приложением, которое прерывает мое приложение с перерывами. Хорошо, что приложение восстанавливается через несколько секунд.

Я сделал следующие изменения в своих библиотеках (баночки/зависимости) и попытался облако. После выполнения этих изменений коэффициент сбоя приложения уменьшается, но, к сожалению, он по-прежнему сбой иногда, и я могу видеть, что зависимости выполняются перед приложением.

  • Добавлено bootRepackage.enabled = ложь bootRepackage.withJarTask = баночка в build.gradle библиотеки
  • Снял из библиотеки и добавил в моем веб-приложение springBoot { MainClass = "com.java.Application" исполняемый = true }
  • Снято @SpringBootApplication из библиотек (зависимости/банки). Сейчас это только в моем веб-приложении.

Я не знаю, что это единственные шаги, которые делают невозможным выполнение загрузочной зависимости, или мне нужно будет сделать что-то еще. Пожалуйста, дайте мне знать, если я что-то упустил.

Вот пример класса приложения одной из моих зависимостей.

import org.springframework.context.annotation.ComponentScan; 

    @ComponentScan 
    public class LoggingApplication { 

    } 

Sample of Web application main class. 
    @SpringBootApplication 
    @EnableWebMvc 
    @Import(LoggingApplication.class) 
    public class Application { 


    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
    } 
+1

Что означает «иногда библиотеки, выполняемые перед веб-приложением»? Библиотеки на самом деле не должны ничего выполнять. –

+0

И, честно говоря, если они являются внутренними зависимостями, а не полноценными приложениями, то почему, черт возьми, вы даже используете Spring Boot? Нормальной Spring Framework должно быть достаточно. – rorschach

ответ

0

Вы не раскрыли stacktrace и не указали какие-либо особенности «аварии». Таким образом, глядя на мой хрустальный шар, это звучит так, будто вы делаете некоторые работы во время фазы подключения весеннего контейнера IoC. Эта «работа» должна быть перемещена в обработчики @PostConstruct, так что вы уверены, что она будет выполнена после того, как Spring Context будет полностью создан и инициализирован.