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);
Или мы можем использовать ссылку на SpringApplication
:
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 свойство было переименовано и теперь использует enum .
5. Вывод
Существует множество причин для создания приложений Spring Boot без веб-сервера. В этом уроке мы видели несколько способов сделать это. У каждого есть свои плюсы и минусы, поэтому мы должны выбрать подход, который лучше всего соответствует нашим потребностям.