【发布时间】: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