Запуск Spring Boot без web-сервера: работа с JMS очередью

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо запустить приложение на базе Spring Boot без применения веб-сервера, вам потребуется внести изменения в файл pom.xml, исключив из перечня зависимостей стартеры для веба:

xml
Скопировать код
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

Помимо этого, необходимо настроить SpringApplication таким образом, чтобы сервер не приступал к запуску:

Java
Скопировать код
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class)
            .web(WebApplicationType.NONE) // Это, как будто Железный человек без своего костюма
            .run(args);
    }
}

Таковым образом, применив профессиональные настройки, вам удастся исключить автоконфигурацию веб-контекста, создав вместо этого необходимую функциональность приложения Spring Boot.

Кинга Идем в IT: пошаговый план для смены профессии

Детальнее о конфигурации и возможных подводных камнях

Выбор типа веб-приложения

Работая со Spring Boot, вы вправе определить тип применяемого веб-сервера — REACTIVE или SERVLET. Чтобы вовсе отключить веб-сервер, используйте spring.main.web-application-type=NONE в файле свойств, либо установите WebApplicationType.NONE непосредственно в коде.

Исключение зависимостей

Настоятельно рекомендуется уделить особое внимание исключению зависимостей веб-сервера чтобы предотвратить их автоконфигурацию. Обязательно проверяйте зависимости: они могут неявно добавлять веб-сервер.

Условная загрузка классов

В случае работы с невеб-приложениями применяйте аннотацию @ConditionalOnClass. Она поможет вам избежать загрузки ненужных бинов, а также сэкономит память.

Задачи после запуска

Для выполнения различных задач после запуска приложения можно воспользоваться CommandLineRunner или ApplicationRunner. Эти инструменты идеально подходят для планирования задач и обработки данных.

Версия приложения

Если вы используете Spring Boot 2.x, то приведенный выше метод отключения веб-сервера идеально подходит для вас. Для Spring Boot 1.x необходимо установить spring.main.web-environment=false.

JMS и логирование

Не забывайте настраивать JMS и логирование, чтобы обеспечить нормальное функционирование ваших сервисов в невеб-окружении и избежать непредвиденных ситуаций и ошибок.

Взгляд в будущее

Даже если в настоящий момент веб-сервер вам не требуется, стройте ваше приложение гибко, учитывая возможное будущее масштабирование и потенциальное включение веб-функционала.

Визуализация

Представьте себе Spring Boot как современное высотное здание с оживленным входом. Обычно вход (веб-сервер) пульсирует потоком людей (веб-запросов).

🏢🚪👥🖥 Spring Boot с Веб-Сервером: Вход активен, обрабатывает веб-запросы

А теперь представьте это здание без оживленного входа: оно все так же внушительно, но выполняет совершенно другие функции.

🏢🚫🚪 Spring Boot без Веб-Сервера: Это больше похоже на частный офис, предназначенный для внутренней работы и планирования

Мы расширяем возможности Spring Boot, адаптируя его под потребности невеб-приложений, планируя задачи и обеспечивая обработку данных без внешней нагрузки в виде веб-трафика.

Погружение в тему

Распространенные трудности

Столкнувшись с определенными проблемами, такими как недостатки при планировании актуальности состояния и конечных точек актуатора, попытайтесь найти подходящие решения, например, применив JMX-конечные точки или создав кастомные проверки работоспособности.

Архитектурные вопросы

В мире микросервисов крайне важно, чтобы даже невеб-сервисы были обнаруживаемыми и взаимодействовали друг с другом. Ваша задача — использовать реестр сервисов, чтобы это стало реальностью.

Преимущества отсутствия веб-сервера

Отказ от веб-сервера поможет вам сократить затраты, связанные с веб-слоем, сделает приложение более легким, быстрым и эффективным, что нельзя недооценить, когда речь идет о задачах обработки и интеграции данных.

Тестирование невеб-приложений

Тестирование приложений без веб-компонента может оказаться сложной задачей. В случае подобных сложностей лучшим решением станет использование фреймворков для мокирования и загрузка контекста, обеспечивающая полноценное тестирование.

Важные ссылки

  1. Spring Boot. Справочное руководство — Прекрасное руководство для знакомства с Spring Boot.
  2. Spring | Руководства — Потрясающая коллекция руководств, благодаря которым вы быстро освоите Spring.
  3. Какой HTTP-код состояния использовать для обновления и удаления? – Stack Overflow — Знания и опыт сообщества разработчиков, которыми стоит поделиться.
  4. Подождите мгновение... — Уникальные рекомендации от Baeldung по созданию консольных приложений Spring Boot.
  5. Руководства по выполнению — Полезные советы по отключению определенных функций Spring Boot.
  6. Общие Свойства Приложений — Полный список свойств конфигурации, доступных в Spring Boot.