Spring Boot DevTools используется внутри контейнера docker даже после исключения в сборке Gradle - PullRequest
0 голосов
/ 07 апреля 2020

Итак, мы используем Spring boot для доставки нашего приложения. Мы используем плагин Jib для мониторинга создания docker изображений и запуска их. Мы используем gradle для создания проекта, и там инструменты разработчика идентифицируются как developmentOnly зависимость. Как упоминалось в весенних документах на https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using -boot-devtools .

Однако, когда он запускается в контейнере в prod, я все равно вижу, что он время от времени перезапускается. Мой вопрос: действительно ли конфигурация gradle не исключает ее из упаковки? Нужно ли явно устанавливать параметр -Dspring.devtools.restart.enabled=false?

Решение:

Получается, что это был плагин Gradle Jib, играющий в игры. В то время как в весенней документации есть информация о том, как go удалить зависимость из проекта начальной загрузки gradle. Техника указания developmentOnly помогает сказать gradle только игнорировать инструменты dev. Плагин jib gradle имеет собственный разум.

Он включает в себя все банки при создании изображения docker, и нет никакого способа исключить какие-либо банки. Единственный разумный способ - это настроить плагин gradle jib в build.gradle, чтобы записать это,

 jib {
    from {
        image 'gcr.io/distroless/java:11'
    }
    container {
        jvmFlags = ['-Xms1G', '-Xmx1G', '-Dspring.devtools.restart.enabled = false']
    }
}

Это будет гарантировать, что, даже если jar включен, среда контейнера позаботится о перезапуске.

Ссылка: https://github.com/spring-projects/spring-boot/issues/15382

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Здесь действительно несколько проблем:

  1. Springboot имеет свои собственные пользовательские определения вместо использования того, что было бы эквивалентно профилям. Их подход лучше всего подходит для пользователей Springboot, но его довольно сложно интегрировать с учетом всех их пользовательских логи c.
  2. Jib не может знать все пользовательские реализации каждой платформы.

Я действительно думаю, что вы должны делать что-то вроде этого:

dependencies {
  if (System.getProperty("development") == true) {
    // include the springboot devtool dependency
  }
}

Если вы хотите запустить или собрать в режиме разработки, просто выполните

./gradlew whateverTask -Ddevelopment=true
1 голос
/ 07 апреля 2020

Этого можно добиться, установив spring.devtools.restart.enabled=false в вашем application.properties или в указанных вами свойствах профиля c ex. application-cloud.properties. Дайте мне знать, если это работает.

...