Java планировщик, который работает с собственной компиляцией изображений GraalVM - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть приложение поверх платформы Quarkus. Основная функциональность приложения - простой REST API для планирования некоторых задач (теперь он просто публикует некоторые сообщения в журнале).

Функциональность планирования, которую я реализовал с помощью Quartz Framework, и в общих чертах это выглядит, когда приложение получает POST запрос на планирование нового события выполняет две вещи:

  • сохранение объекта из запроса к базе данных;
  • расписание кварцевых заданий на указанные в JSON дату и время.

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

Но когда я пытался создать собственный образ для этого приложения, используя GraalVM Я столкнулся с таким исключением:

com. oracle .graal.pointsto.constraints.UnsupportedFeatureException: в кучи изображений не допускаются экземпляры sun.security.provider.NativePRNG, так как этот класс должен быть инициализируется во время выполнения изображения.

Быстрый поиск в Google дал мне закрытую проблему в Gra alVM Github repo , в котором говорится, что Quartz использует ObjID RMI с инициализацией во время выполнения. Из-за этого Quartz нельзя использовать в приложениях, где требуется компиляция собственных изображений GraalVM.

Так же и планировщик Quarkus позволяет планировать задания прямо в коде Java (что-то вроде моей реализации с Quartz) ? Во всех примерах и фрагментах кода, которые я нашел, я видел только довольно простое использование аннотации @Scheduled для методов (как в официальном руководстве). Или, может быть, есть другие альтернативные инструменты для планирования задач в Java, которые работают с собственной компиляцией изображений?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Итак, расширение Quarkus Quartz (построено поверх quarkus-scheduler) поддерживает собственные изображения GraalVM. Правда в том, что API не поддерживает программирование c, и невозможно получить доступ к базовому экземпляру Quartz Scheduler. Я создал https://github.com/quarkusio/quarkus/issues/7246 для решения последней проблемы.

Так же и планировщик Quarkus позволяет планировать задания прямо в Java коде ...

Да, см. { ссылка }.

0 голосов
/ 18 февраля 2020

Может быть отключено topi c, но просто для того, чтобы вы знали, что у вас могут возникнуть странные проблемы с планированием при запуске приложения в (Docker) контейнере, поскольку часовой пояс в контейнере может отличаться от вашего местного часового пояса. Так что планировщик может бороться с огнем в разное время, чем вы настроили.

Чтобы исправить это, мне пришлось добавить следующие строки в мой Dockerfile:

# set the correct timezone
RUN apk add --no-cache tzdata
ENV TZ=Europe/Amsterdam  <---your timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Только мои 2 цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...