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