В 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”