【问题标题】:Java scheduler that works with native image compilation by GraalVM使用 GraalVM 进行本机图像编译的 Java 调度程序
【发布时间】:2020-02-17 07:58:01
【问题描述】:

我有基于 Quarkus 框架的应用程序。该应用程序的主要功能 - 用于安排一些任务的简单 REST API(现在它只是将一些消息发布到日志中)。

我使用 Quartz 框架实现的调度功能,一般来说,当应用收到 POST 请求以调度新事件时,它会做两件事:

  • 将请求中的实体保存到数据库中;
  • 安排在 JSON 日期和时间中提到的 Quartz 作业。

对于应用程序刚刚启动的情况,我创建了从数据库中获取所有实体并为它们安排 Quartz 作业的方法。

但是当我尝试使用 GraalVM 为该应用程序构建本机映像时,我遇到了这样的异常:

com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: 否 图像中允许使用 sun.security.provider.NativePRNG 的实例 堆,因为这个类应该在图像运行时初始化。

Google 中的快速搜索给了我closed issue in GraalVM Github repo,它说 Quartz 使用 RMI 的 ObjID 和运行时初始化。因此,Quartz 无法用于需要 GraalVM 进行本地映像编译的应用程序。

那么 Quarkus 调度程序是否提供了在 Java 代码中调度作业的能力(类似于我使用 Quartz 的实现)?在我发现的所有示例和代码片段中,我只能看到在方法上使用 @Scheduled 注释的非常简单的用法(就像在官方指南中一样)。或者也许还有其他替代工具可以在 Java 中与原生图像编译一起使用来调度任务?

【问题讨论】:

  • 您好,您使用的是quarkus-scheduler 扩展名quarkus.io/guides/scheduler 吗?我了解您以编程方式处理任务,但使用扩展程序会使事情在本机中工作
  • 我尝试使用“quarkus-scheduler”,但您可能知道以编程方式调度任务的功能已从该模块中删除(可能是由于我在问题中提到的 Quartz 问题)。
  • 您是否尝试保持代码不变但仍添加扩展名,是否有效?如果没有,您可以在 Github 上打开一个问题以收集更多反馈。
  • 我试过了,但这对我没有帮助。至于打开一个问题 - 这是一个很好的提示,谢谢!

标签: java quartz-scheduler quarkus graalvm graalvm-native-image


【解决方案1】:

所以 Quarkus Quartz 扩展(建立在 quarkus-scheduler 之上)确实支持 GraalVM 原生镜像。事实上,API 不支持编程调度,并且无法访问底层的 Quartz Scheduler 实例。我创建了https://github.com/quarkusio/quarkus/issues/7246 来解决后一个问题。

Quarkus 调度程序也提供了直接在 Java 代码中调度作业的能力...

是的,请参阅https://stackoverflow.com/a/60275796/2654154

【讨论】:

    【解决方案2】:

    也许题外话,但只是为了让您知道,在(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 美分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-08-31
      • 2022-12-18
      相关资源
      最近更新 更多