Автор оригинала: Michael Pratt.
1. введение
Spring Boot-это отличный фреймворк для быстрого создания новых Java-приложений для различных вариантов использования. Одно из самых популярных применений-это веб-сервер, использующий один из многих поддерживаемых встроенных контейнеров сервлетов и механизмов шаблонов.
Однако Spring Boot имеет ряд применений, для которых не требуется веб-сервер : консольные приложения , планирование заданий, пакетная или потоковая обработка, бессерверные приложения и многое другое.
В этом уроке мы рассмотрим несколько различных способов использования Spring Boot без веб-сервера.
2. Использование зависимостей
Самый простой способ запретить приложению Spring Boot запускать встроенный веб-сервер-это не включать стартер веб-сервера в наши зависимости .
Это означает, что не следует включать зависимость spring-boot-starter-web ни в файл сборки Maven POM, ни в файл сборки Gradle. Вместо этого мы хотели бы использовать более базовую зависимость spring-boot-starter вместо нее.
Имейте в виду что зависимости Tomcat могут быть включены в наше приложение в качестве транзитивных зависимостей . В этом случае нам, возможно, потребуется исключить библиотеку Tomcat из любой зависимости, включающей ее.
3. Изменение приложения Spring
Еще один способ отключить встроенный веб-сервер в Spring Boot-это использовать код. Мы можем использовать либо SpringApplicationBuilder :
new SpringApplicationBuilder(MainApplication.class) .web(WebApplicationType.NONE) .run(args);
Или мы можем использовать ссылку на приложение Spring :
SpringApplication application = new SpringApplication(MainApplication.class); application.setWebApplicationType(WebApplicationType.NONE); application.run(args);
В любом случае у нас есть преимущество в том, что API-интерфейсы сервлетов и контейнеров доступны в пути к классам . Это означает, что мы все еще можем использовать библиотеки веб-сервера без запуска веб-сервера. Это может быть полезно, например, если мы хотим использовать их для написания тестов или использовать их API в нашем собственном коде.
4. Использование свойств приложения
Использование кода для отключения веб — сервера является статическим вариантом-это повлияет на наше приложение независимо от того, где мы его развернем. Но что, если мы хотим создать веб-сервер в определенных обстоятельствах?
В этом случае мы можем использовать свойства приложения Spring:
spring.main.web-application-type=none
Или используя эквивалентный YAML:
spring: main: web-application-type: none
Преимущество такого подхода заключается в том, что мы можем условно включить веб-сервер . Используя профили Spring или условные обозначения , мы можем управлять поведением веб-сервера в различных развертываниях.
Например, мы могли бы запустить веб-сервер в разработке только для предоставления метрик или других конечных точек Spring, сохраняя его отключенным в рабочей среде по соображениям безопасности.
Обратите внимание, что некоторые более ранние версии Spring Boot использовали логическое свойство с именем web-environment для включения и отключения веб-сервера. С принятием как традиционных, так и реактивных контейнеров в Spring Boot, свойство было переименовано и теперь использует перечисление .
5. Заключение
Существует множество причин для создания приложений Spring Boot без веб-сервера. В этом уроке мы рассмотрели несколько способов сделать это. У каждого из них есть свои плюсы и минусы, поэтому мы должны выбрать подход, который наилучшим образом отвечает нашим потребностям.