我的应用程序位于 Quarkus 框架之上。该应用程序的主要功能 - 用于安排一些任务的简单 REST API(现在它只是将一些消息发布到日志中)。
我使用 Quartz 框架实现的调度功能,通常看起来当应用程序收到 POST 请求以调度新事件时,它会做两件事:
- 将请求中的实体保存到数据库;
- 安排在 JSON 日期和时间中提到的 Quartz 作业。
同样对于应用程序刚刚启动的情况,我创建了从数据库中获取所有实体并为它们安排 Quartz 作业的方法。
但是当我尝试使用 GraalVM 为该应用程序构建本机映像时,我遇到了这样的异常:
com.oracle.graal.pointsto.constraints.UnsupportedFeatureException:图像堆中不允许有 sun.security.provider.NativePRNG 的实例,因为此类应在图像运行时初始化。
Google 中的快速搜索在GraalVM Github 存储库中给了我关闭的问题,即 Quartz 使用 RMI 的 ObjID 和运行时初始化。由于 Quartz 不能用于需要 GraalVM 进行本机映像编译的应用程序。
那么 Quarkus 调度器是否提供了在 Java 代码中调度作业的能力(类似于我使用 Quartz 的实现)?在我发现的所有示例和代码片段中,我只能看到在方法上使用 @Scheduled 注释的非常简单的用法(就像在官方指南中一样)。或者,也许有任何其他替代工具可以在 Java 中与本机图像编译一起使用来调度任务?