В Quarkus имеет две различные формы планирования деятельности, в сегодняшнем посте мы узнаем, более простой способ, который является для действий, которые происходят несколько раз в среде, не paralelizado.
Не хватает примеры разных приложений, которые используют повторные действия. Есть некоторое приложение, которое проверяет, все ли правильно e-mail или же тот, tice решение, что нужно перезапустить приложение, время от времени по какой-либо утечки памяти, неизвестно (первый брось в нее камень, кто никогда этого не делал).
Причина не имеет значения, в какой-то момент, вы, в конечном счете находя ситуаций, когда данное действие, необходимо, повторяется время от времени.
На пример сегодня мы будем делать небольшой сервер, который записывает звуки ударов, как soc , tum , pow время от времени.
Таблица ниже показывает/объясняет что будет правила, используемые, чтобы каждый удар отображаться.
0 секунда | Каждые 11 секунд | Soc |
0 секунда | Каждый второй кратное 17 | Tum |
0 секунда | Каждый второй múltiple 23 | Pow |
0 секунда | Каждые 29 секунд | Kabam |
1 минута | Каждые 3 секунды | kataplow |
Для создания нового проекта Quarkus, уже с расширение, которое управляет повторяющихся задач, просто используйте следующий код.
mvn io.quarkus:quarkus-maven-plugin:1.6.0.Final:create \ -DprojectGroupId=org.acme \ -DprojectArtifactId=scheduler-soc-tum-pow \ -DclassName="org.acme.schedule.SocTumPowGenerator" \ -Dextensions="scheduler"
Это создаст папку с именем scheduler-soc-тум-pow, который будет во всем нашем коде, и уже придет с расширением | планировщик| установки.
После этого просто удалять тесты уже созданы.
С этим, мы открываем файл SocTumPowGenerator.java и изменить, чтобы получить следующий код.
package org.acme.schedule; import javax.enterprise.context.ApplicationScoped; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.quarkus.scheduler.Scheduled; import io.quarkus.scheduler.ScheduledExecution; import java.util.concurrent.TimeUnit; @ApplicationScoped // (1) public class SocTumPowGenerator { private static final Logger log = LoggerFactory.getLogger(SocTumPowGenerator.class); // (2) @Scheduled(every = "11s") // (3) void soc() { log.info("soc"); } @Scheduled(cron = "0/17 * * * * ?") // (4) void tum() { log.info("tum"); } @Scheduled(cron = "{cron.expr}") // (5) void pow() { log.info("pow"); } @Scheduled(every = "{every.expr}") // (6) void kabam() { log.info("kabam"); } @Scheduled(delay = 1, // (7) delayUnit = TimeUnit.MINUTES, // (8) every = "3s") // (9) void kataplow() { log.info("kataplow"); } }
e нет приложения arquivo.свойства, colocar как seguintes propriedades.
quarkus.log.console.format=%d{HH:mm:ss}: %s%e%n # (10) cron.expr=0/23 * * * * ? # (11) every.expr=29s # (12)
Pequena nota: dó no arquivo приложение.свойства надо снять старую игру и скобки, если не возникает ошибок.
Теперь давайте вытянуть из нее, что каждая из строк в результате.
- Весь код, который запускает cron, нужно быть управляемым bean. Добавить в заметки ApplicationScoped лучший способ сделать это. Кроме того, это примечание гарантирует, что будет создан только один планировщик задач;
- Я использовал библиотеку журнала для облегчения написания, потому что она покажет время, что метод был казнен;
- Аннотации Scheduled сообщает, что метод будет повторяться время от времени. Атрибут every о том, как этот метод будет вызван;
- Атрибут крон позволяет контролировать время был сделан на основе стандартного, используемого crontab ;
- В Quarkus имеет интеграции очень здорово с частью конфигурации. С помощью этих ключей, он будет искать информацию в файле application.свойства;
- То же самое касается выражений типа every;
- Инструкции повторил типа every начинают вращаться так, что возможно. Таким образом, даже если у вас есть что-то типа every=”40″ первый запуск произойдет вскоре после того, как сервер инициализации и запуска происходит следующее 40 минут после первого запуска. Можно задержать первый вызов метода через атрибут delay ;
- Атрибут delay показывает время, что приведет к задержке выполнения. Атрибут delayUnit сообщает, диск времени, будет задержка;
- Аналогично пункту 3, здесь мы сообщаем вам, что операция происходит каждые 3 секунды;
- Настройки журнала для печати только время и текст журнала;
- Выражение крон используется для элемента 5, и ввести как параметр;
- Выражение delay используется для элемента 6 и вставляется в качестве установки.
Выполнение кода с эти настройки, выход более или менее, как это:
mvn quarkus:dev executing mvnw instead of mvn [INFO] Scanning for projects... [INFO] [INFO] ---------------------< org.acme:code-with-quarkus >--------------------- [INFO] Building code-with-quarkus 1.0.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- quarkus-maven-plugin:1.6.0.Final:dev (default-cli) @ code-with-quarkus --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 2 resources [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /home/aleatorio/VisualCodeProjects/blog-posts-code/scheduled-task/target/classes Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 22:37:00: code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.6.0.Final) started in 0.772s. 22:37:00: Profile dev activated. Live Coding activated. 22:37:00: Installed features: [cdi, scheduler] 22:37:01: kabam 22:37:01: soc 22:37:12: soc 22:37:17: tum 22:37:23: pow 22:37:23: soc 22:37:30: kabam 22:37:34: soc 22:37:34: tum 22:37:45: soc 22:37:46: pow 22:37:51: tum 22:37:56: soc 22:37:59: kabam 22:38:00: kataplow 22:38:00: pow 22:38:00: tum 22:38:03: kataplow 22:38:06: kataplow 22:38:07: soc 22:38:09: kataplow 22:38:12: kataplow 22:38:15: kataplow 22:38:17: tum 22:38:18: kataplow 22:38:18: soc 22:38:21: kataplow 22:38:23: pow 22:38:24: kataplow
Для простых задач, и повторил этот процесс даже руки на руле. Все упрощает. Предпочитаю работать с заданными параметрами в файле конфигурации, потому что я могу изменить все, по мере необходимости моего тестирования.
Я все еще привыкаю к этому вопросу писать статьи, я надеюсь, что удастся помочь больше и больше людей с этим.
Да, и код, сегодня можно найти нет github .
Оригинал: “https://dev.to/lucasscharf/agendando-tarefas-repetitivas-em-java-com-quarkus-7mn”