#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 в основном классе, и приложение не закроется.