|
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
|
||||||
Spring @Scheduled22.07.2022, 23:56. Показов 1265. Ответов 7
Метки нет (Все метки)
подскажите пожалуйста как работать с таймером в спринге? или легче юзать родной java тамер?
мне нужно в течении 15 минут опрашивать сторонний сервис с интервалом 1 минута. опрос каждую минуту я осилил, но теперь мне нужно чтобы это срабатывало когда нужно, и работало ровно 15 минут. так же нужна возможность остановить таймер раньше, если придет нужный ответ от стороннего сервиса. как бы максимально правильно это сделать? если я не понятно объяснил задайте вопрос для лучшего понимания. вот мой класс, он пингует гугл каждую минуту, я хочу чтобы этот пинг начинался был по ивенту, а не с момента запуска приложения. (время ивента не известно)
ну или для java.util.Timer нет в спринге альтернатив?
0
|
||||||
| 22.07.2022, 23:56 | |
|
Ответы с готовыми решениями:
7
Spring @Scheduled Spring Scheduled запуски задачи один раз только при старте web application Spring MVC. 404 ошибка при включении Spring Data JPA в проект |
|
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
|
||||||||||||||
| 23.07.2022, 08:46 | ||||||||||||||
|
1. ожидай событие свое. 2. https://stackoverflow.com/ques... n-number-o fyi. вот это
0
|
||||||||||||||
|
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
|
|
| 23.07.2022, 14:35 [ТС] | |
|
а почему родной java таймер не годится можно чуть более подробно для развития моего?)
короче обьясню бизнес логику вдруг так будет понятнее: клиент покупает товар, оплачивает его через сторонний сервис. мое приложение, после инициализации ордера, проверяет, оплатил ли клиент на самом деле или просто запросил реквизиты для оплаты. проверяет в течении 15 минут, каждую минуту. если ответ от стороннего сервиса ОК, я выдаю товар клиенту, если по истечении 15 минут ответа нет - мое приложение закрывает ордер. 15 минут это не конечное число.... оплату на карту я жду 15 минут, а оплату биткойном жду 45минут..
0
|
|
|
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
|
||||||||
| 23.07.2022, 19:42 | ||||||||
|
If the timer's task execution thread terminates unexpectedly, for example, because its stop method is invoked, any further attempt to schedule a task on the timer will result in an IllegalStateException, as if the timer's cancel method had been invoked. для примера:
Java 5.0 introduced the java.util.concurrent package and one of the concurrency utilities therein is the ScheduledThreadPoolExecutor which is a thread pool for repeatedly executing tasks at a given rate or delay. It is effectively a more versatile replacement for the Timer/TimerTask combination, as it allows multiple service threads, accepts various time units, and doesn't require subclassing TimerTask (just implement Runnable). Configuring ScheduledThreadPoolExecutor with one thread makes it equivalent to Timer. https://docs.oracle.com/en/jav... Timer.html Добавлено через 4 часа 45 минут шедулер можешь запускать каждую минуту. будет искать в базе заказы, которые были создани больше 15 минут назад и еще не были оплачены, и не закрыты. нашел например 3 заказа, сделал 3 запроса. если первые два были оплачены, то помечаешь их как оплаченные, третий закрываешь если прям капец как надо каждую минуту и 15 попыток, то добавь новое поле в заказ, которое будет хранить в себе это количество попыток и дальше в шедулере обновляй
1
|
||||||||
|
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
|
|
| 04.08.2022, 17:08 [ТС] | |
|
поизучав инфу понял что мне подходит только ScheduledThreadPoolExecutor
-он не привязан к системным часам -он не только перехватывает исключения во время выполнения, но и позволяет обрабатывать их -он настраивается с любым количеством потоков (хотя мое приложение однопоточное) если кто то имел с ним дело подскажите могу ли я там задавать имя для таска? исходя из моей задачи из первого поста если в кратце: после каждого заказа, я задаю таймер 15 минут, и один раз через 15 минут делаю запрос на сторонне API, независимо от ответа мне нужно выполнить бизнес логику(ту или иную) и закрыть таймер. в эти 15 минут пользователь может отменить заказ и это так же должно будет остановить таймер. как бы мне такое организовать? создавать каждый раз Runnable с номером ордера?
0
|
|
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 04.08.2022, 17:40 | |
|
ты можешь сделать таску, которая будет, например, раз в минуту ходить в бд и смотреть, есть ли какие-то действия, которые надо выполнить, соответственно, если есть - выполнит.
Останавливать саму таску при этом не требуется - достаточно в бд поменять статус - типа Done. т.е. пользователь приходит, создает заказ, ты его кладешь в базу, ставишь статус типа TO_BE_PROCESSED, ставишь creationTime. запускается твой скедулер, достает из бд заказ, смотрит, что он создан менее 15 минут назад, занчит пока не надо ниче делать. Видит, что другой заказ создан более 15 минут назад и статус TO_BE_PROCESSED, обрабатываешь его, как надо, ставишь статус DONE... PROFIT
1
|
|
|
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
|
|
| 04.08.2022, 20:59 [ТС] | |
|
да заказы безусловно у меня в базе и имеют поле creationtime и поле orderstatus.
впервые сталкиваюсь с такой задачей поэтому подытожу понятое: Использую строго ScheduledThreadPoolExecutor либо аннотацию спринга @Scheduled (притом это для меня более предпочтительно, хотелось бы проект базировать именно на возможностях спринга) мой Scheduler каждую минуту берет из базы заказы со статусом "НЕОПЛАЧЕНО" и проеряет их creationtime и currenttime системы (в базе данных время создания записи заказа берется из системного времен сервера где крутится прога??). Если разница по времени 15 минут, то запрашиваю сторонее API на проверку/подтверждение и выставляю ордеру(ордерам) статус "ОТМЕНЕН" или "ОПЛАЧЕН". Так для каждого ордера на сторонее API для подтверждения будет послан только один запрос. Изменить статус заказа все эти 15 минут может и юзер нажав на кнопку во вьюшке типо "я оплатил", тем самым послав запрос на сторонее API, если по API придет подтверждение - ставлю заказу статус "ОПЛАЧЕНО" и выдаю товар. Если нет подтверждения со стороннего API - пишу об этом юзеру и ждем дальше. так работаем?
0
|
|
|
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
|
|
| 07.08.2022, 21:27 [ТС] | |
|
подскажите, мой шелдулер должен эмитировать действия пользователя и направлять по результатам проверок запрос на контроллер?
или как то через спринговские ивенты лучше действовать?
0
|
|
| 07.08.2022, 21:27 | |
|
Помогаю со студенческими работами здесь
8
Перевод проекта из Spring Maven в обычный Spring MVC задания по spring core и spring mvc для новичков Spring Boot VS Tomcat+Spring - что выбрать? Spring: а как вы разрешаете зависимости для spring ? Jetty embedded + Spring MVC + Spring Security Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|