Запуск Spring Boot без web-сервера: работа с JMS очередью
Быстрый ответ
Если вам необходимо запустить приложение на базе Spring Boot без применения веб-сервера, вам потребуется внести изменения в файл pom.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 таким образом, чтобы сервер не приступал к запуску:
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.
Детальнее о конфигурации и возможных подводных камнях
Выбор типа веб-приложения
Работая со 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-конечные точки или создав кастомные проверки работоспособности.
Архитектурные вопросы
В мире микросервисов крайне важно, чтобы даже невеб-сервисы были обнаруживаемыми и взаимодействовали друг с другом. Ваша задача — использовать реестр сервисов, чтобы это стало реальностью.
Преимущества отсутствия веб-сервера
Отказ от веб-сервера поможет вам сократить затраты, связанные с веб-слоем, сделает приложение более легким, быстрым и эффективным, что нельзя недооценить, когда речь идет о задачах обработки и интеграции данных.
Тестирование невеб-приложений
Тестирование приложений без веб-компонента может оказаться сложной задачей. В случае подобных сложностей лучшим решением станет использование фреймворков для мокирования и загрузка контекста, обеспечивающая полноценное тестирование.
Важные ссылки
- Spring Boot. Справочное руководство — Прекрасное руководство для знакомства с Spring Boot.
- Spring | Руководства — Потрясающая коллекция руководств, благодаря которым вы быстро освоите Spring.
- Какой HTTP-код состояния использовать для обновления и удаления? – Stack Overflow — Знания и опыт сообщества разработчиков, которыми стоит поделиться.
- Подождите мгновение... — Уникальные рекомендации от Baeldung по созданию консольных приложений Spring Boot.
- Руководства по выполнению — Полезные советы по отключению определенных функций Spring Boot.
- Общие Свойства Приложений — Полный список свойств конфигурации, доступных в Spring Boot.