Перейти к основному содержимому

Spring Boot без веб-сервера

· 3 мин. чтения

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