Возможно ли/целесообразно запускать Spring Boot без контроллеров только для @ScheduledTasks и ORM?

#java #spring #spring-boot

Вопрос:

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

Основная проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на настройку запланированной задачи, служба запускается и немедленно завершается без выполнения запланированной задачи. В моей голове я представил, как служба просто сидит там, работает, ждет времени, чтобы запустить запланированное задание, которое я настроил, и вроде как просто спит до тех пор. Мои ожидания плохи, или я просто неправильно их настроил?

Комментарии:

1. Добавьте фрагмент кода вашей задачи @ScheduledTask. Я думаю, это должно быть возможно

2.Да, это возможно. Читайте о запланированных задачах весной по этим ссылкам. https://www.baeldung.com/spring-scheduled-tasks https://spring.io/guides/gs/scheduling-tasks/

3. Я не уверен, что вы понимаете проблему. Я знаю, как работают запланированные задачи. Я заставил их работать в других приложениях Spring, в которых также были материалы, связанные с контроллерами. Что происходит, так это то, что без материалов, связанных с контроллером, служба не работает достаточно долго для выполнения задачи. Он запускается, а затем сразу же выключается, так как он не находится в режиме «прослушивания запросов».

4. Это должно быть возможно. Не могли бы вы поделиться каким-нибудь кодом?

Ответ №1:

Я решил эту проблему. Это была проблема с конфигурацией, из-за которой приложение Spring Boot не распознало наличие требуемых значений конфигурации в файле application.properties.

Ответ №2:

Вы можете либо удалить spring-boot-starter-web из своих зависимостей, либо в своем основном классе вы можете настроить SpringApplicationBuilder , чтобы не включать веб-сервер.

 new SpringApplicationBuilder(YourApplication.class)
  .web(WebApplicationType.NONE)
  .run(args);
 

Комментарии:

1. ДА. А затем приложение запускается и сразу же выключается, даже не пытаясь выполнить какие-либо запланированные задачи.

Ответ №3:

Используйте @EnableScheduling в основном классе, и приложение не закроется.