Горячий код HotSwap в Intellij в проекте Spring-Boot? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую spring-boot-starter для большого серверного проекта, который открывает статический сокет для связи.Поскольку не всегда приходится перезагружать сервер в Intellij IDEA после каждого изменения кода (и, следовательно, выходить из соединения с сокетом), я пытаюсь HotSwap измененный * .java-код.

Я безуспешно пытался сделать следующее:

  • добавил maven spring-boot-devtools зависимость
  • Настройки> Build project automatically [yes]
  • Реестр: complier.automake.allow.when.app.running [true]
  • Запустить конфигурацию> Политики обновления: Update classes and resources

НО: всякий раз, когда я изменяю класс, мое приложение перезапускается автоматически.Конечно, это также перезагрузит классы, но тогда я мог бы также инициировать сам перезапуск по желанию.Я ничего не получаю при автоматическом перезапуске.

Поэтому я отключил перезапуск через spring.devtools.restart.enabled=false.Но тогда подкачка кода не будет работать, пока сервер не будет перезапущен.

Но возможно ли это вообще без явного перезапуска?

Sidenote: Я не про горячую замену веб-интерфейса вбраузер.Я просто хочу перезагрузить Java-код.

1 Ответ

0 голосов
/ 06 февраля 2019

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

Технология перезапуска, предоставляемая Spring Boot, работаетиспользуя два загрузчика классов.Классы, которые не изменяются (например, из сторонних jar-файлов), загружаются в базовый загрузчик классов.Классы, которые вы активно разрабатываете, загружаются в загрузчик классов перезапуска.Когда приложение перезапускается, перезапускается загрузчик классов, и создается новый.Этот подход означает, что перезапуски приложений обычно выполняются намного быстрее, чем «холодные запуски», поскольку загрузчик базовых классов уже доступен и заполнен.

Если вы хотите выполнить горячую замену кода без перезапуска, тогда можно использовать один из вариантов JRebel .В документации по Spring Boot говорится то же самое:

Если вы обнаружите, что перезапуски недостаточно быстры для ваших приложений, или у вас возникают проблемы с загрузкой классов, вы можете рассмотреть возможность перезагрузки таких технологий, как JRebel из ZeroTurnaround.

...