Можем ли мы добавить зависимость maven только после загрузки друг друга? - PullRequest
0 голосов
/ 13 марта 2020

Я импортирую флягу через зависимость maven, фляга работает бесконечно l oop. Я хочу полностью разрешить некоторые другие зависимости перед загрузкой фляги.

Я хочу загрузить

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Подождите, пока я получу в своих журналах

Exposing 2 endpoint(s) beneath base path '/actuator'
Tomcat started on port(s): 1339 (http) with context path ''

Затем загрузите мою зависимость JAR.

Что происходит, когда он начинает загружать их зависимости, затем попадает в бесконечное l oop в банке и не завершается.

Спасибо

1 Ответ

1 голос
/ 13 марта 2020

Jar не выполняет бесконечный l oop, jar - это набор двоичных источников (и, возможно, ресурсов, таких как jsons, файлы свойств, xmls и т. Д. c.) Внутри артефакта.

Таким образом, работа maven как инструмента сборки заключается в подготовке артефакта. Как только артефакт создан, Maven готов, вы больше не можете влиять / изменять вещи.

Теперь, поскольку у вас есть среда выполнения, такая как spring - она ​​может запускать некоторые bean-компоненты внутри jar-файлов при следующих условиях:

  • Загрузка bean-компонента ленивым образом (только когда метод bean-компонента будет вызываться первым)
  • Асинхронный запуск методов bean-компонентов (с использованием аннотации @Async)
  • Загружать bean-компоненты только в том случае, если указан какой-либо профиль (или другое условие, например свойство).

Все это способы настройки поведения приложения во время выполнения с помощью Spring, но опять же, технически maven тут нечего делать.

Так что, чтобы

избежать бесконечного l oop внутри банки

Вы можете узнать, какой боб точно вызывает бесконечное l oop (опять же, это вообще не 'jar', а какой-то конкретный c bean)

Используйте аннотацию @Async или определите свой собственный пул потоков и запустите метод бин тха t вызывает l oop там (@Async больше spring-i sh способ сделать это)

В любом случае, если вы загружаете бин пружиной, у него есть один поток для заполнения приложения контекст (который должен загрузить все компоненты и использовать механизм внедрения зависимостей). Поэтому, если этот поток застревает из-за того, что какой-то bean-компонент вызывает бесконечное значение l oop во время его инициализации (конструктор или метод после конструирования) - все приложение будет зависать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...