当前位置: 首页 > 知识库问答 >
问题:

使用GraalVM的本机图像编译的Java调度器

邵绪
2023-03-14

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

调度功能是我用Quartz framework实现的,通常情况下,当应用程序收到安排新事件的POST请求时,它会做两件事:

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

此外,当应用程序刚刚启动时,我创建了从html" target="_blank">数据库中获取所有实体并为它们安排石英作业的方法。

但当我试图使用GraalVM为该应用程序构建本机映像时,我遇到了这样一个例外:

通用域名格式。神谕格拉尔。指向。限制。UnsupportedFeatureException:没有sun的实例。安全供应商。允许在映像堆中使用NativePRNG,因为此类应在映像运行时初始化。

在谷歌的快速搜索给了我在GraalVM Github回购中的封闭问题,它说,Quartz使用RMI的ObjID进行运行时初始化。由于Quartz不能用于需要GraalVM本地图像编译的应用程序。

那么Quarkus调度器是否提供了在Java代码中正确调度作业的功能(类似于我用Quartz实现的情况)?在我发现的所有示例和代码中,我只能看到@Scheduled annotation在方法上非常简单的用法(比如在官方指南中)。或者,有没有其他工具可以用来在Java中调度与本机图像编译一起工作的任务?

共有2个答案

徐皓君
2023-03-14

也许是离题,但只是想让你知道,在(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美分。

乐正浩宕
2023-03-14

因此Quarkus Quartz扩展(构建在Quarkus调度程序之上)确实支持GraalVM本机映像。事实上,API不支持编程调度,也不可能访问底层Quartz调度程序实例。我创造了https://github.com/quarkusio/quarkus/issues/7246解决后一个问题。

Quarkus调度器也提供了在Java代码中调度作业的能力...

是的,看到了吗https://stackoverflow.com/a/60275796/2654154.

 类似资料:
  • 我有一个Java项目,我用GraalVM原生映像编译成可执行的二进制文件。我想为Travis CI的项目配置持续集成过程,这对我来说很难——Travis CI允许吗?如何配置。特拉维斯。用GraalVM原生图像构建的yml文件?

  • 我有一个JavaFX项目,希望使用GraalVM Java虚拟机和相关的本机映像工具将其编译成Linux二进制文件。我正在使用GraalVM Java 11版本20.1.0和本机Image Maven插件来实现这一点,该插件是通过Maven添加的。 最初,我收到一个错误,说明我使用本机映像跟踪代理生成用于反射的配置文件,我将其传递到编译器插件中,如下所示: 我还打开了堆栈跟踪异常报告。 现在,当我

  • 我试图在micronaut服务中使用自定义外部库(aws lambda通过api网关与graalvm本机编译) 我的库中有几个类需要jackson在反序列化过程中使用。因此,我在一个单独的配置类中将我的类添加到注释中(如文档中所述)https://docs.micronaut.io/latest/guide/index.html#_use_the_code_introspected_code_an

  • GraalVM系统显然无法将Spring应用程序编译为本机映像。

  • 根据文档,GraalVM项目中的本机映像编译器有一些动态代理的限制。既然Hibernate大量使用了代理,那么它在提前编译的项目中能正常工作吗? Quarkus项目似乎表明它可以,但我的理解主要是基于Reddit的一篇帖子说 Hibernate ORM现在即使编译为GraalVM本机映像也可以工作--只要确保使用Quarkus构建应用程序即可。 如果我不想(或者不会)使用夸克呢?是否可以使用使用H

  • 我试图使用<code>原生映像maven插件