Рубрики
Без рубрики

Планирование повторяющихся задач в Java с Quarkus

В Quarkus имеет две различные формы планирования деятельности, в сегодняшнем посте мы будем изучать… Помеченные кварками, java, ptbr, brazilianandevs.

В 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 приложение.свойства надо снять старую игру и скобки, если не возникает ошибок.

Теперь давайте вытянуть из нее, что каждая из строк в результате.

  1. Весь код, который запускает cron, нужно быть управляемым bean. Добавить в заметки ApplicationScoped лучший способ сделать это. Кроме того, это примечание гарантирует, что будет создан только один планировщик задач;
  2. Я использовал библиотеку журнала для облегчения написания, потому что она покажет время, что метод был казнен;
  3. Аннотации Scheduled сообщает, что метод будет повторяться время от времени. Атрибут every о том, как этот метод будет вызван;
  4. Атрибут крон позволяет контролировать время был сделан на основе стандартного, используемого crontab ;
  5. В Quarkus имеет интеграции очень здорово с частью конфигурации. С помощью этих ключей, он будет искать информацию в файле application.свойства;
  6. То же самое касается выражений типа every;
  7. Инструкции повторил типа every начинают вращаться так, что возможно. Таким образом, даже если у вас есть что-то типа every=”40″ первый запуск произойдет вскоре после того, как сервер инициализации и запуска происходит следующее 40 минут после первого запуска. Можно задержать первый вызов метода через атрибут delay ;
  8. Атрибут delay показывает время, что приведет к задержке выполнения. Атрибут delayUnit сообщает, диск времени, будет задержка;
  9. Аналогично пункту 3, здесь мы сообщаем вам, что операция происходит каждые 3 секунды;
  10. Настройки журнала для печати только время и текст журнала;
  11. Выражение крон используется для элемента 5, и ввести как параметр;
  12. Выражение 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”