scala 如何在任务完成后终止Quarkus应用程序

js5cn81o  于 4个月前  发布在  Scala
关注(0)|答案(1)|浏览(98)

我们的团队使用Quarkus框架,我需要创建一个项目,只需运行一个任务,然后退出本身。
我阅读了Quarkus文档,并在scala中编写了如下代码。在主应用程序Quarkus.run(classOf[EMRExecutionMonitor], args: _*)中调用EMRExecutionMonitor
Quarkus启动,我可以看到日志记录,但Quarkus不会退出,即使我调用Quarkus。cExit(0)它只是保持在控制台运行,直到我使用Ctrl+C
我在Jar中构建项目,并作为java -jar quarkus-run.jar运行
我的期望是当EMRExecutionMonitor中的逻辑完成时,Quarkus应用程序退出。

class EMRExecutionMonitor extends QuarkusApplication {

    private val logger = LoggerFactory.getLogger(this.getClass)
    override def run(args: String*): Int = {
        logger.info("start EMR execution monitoring job")
        Quarkus.waitForExit()
        Quarkus.asyncExit(0)
        0
    }
}

字符串
谢谢

mhd8tkvw

mhd8tkvw1#

我建议你使用@QuarkusMain功能在main方法中执行你的代码。下面的例子在最后执行并终止你的代码。

@QuarkusMain
public class EMRExecutor {

public static void main(String... args) {
    Quarkus.run(EMRExecutionMonitor.class, args);
    Quarkus.asyncExit(0);
}
public static class EMRExecutionMonitor implements QuarkusApplication{

    @Override
    public int run(String... args) throws Exception {
        Log.info("start EMR execution monitoring job");
        Quarkus.waitForExit();
        return 0;
    }
}
}

字符串
控制台输出将打印出终止信息:

2023-11-19 13:51:45,671 INFO  [sk.mal.EMRExecutor$EMRExecutionMonitor] (Quarkus Main Thread) start EMR execution monitoring job
2023-11-19 13:51:45,717 INFO  [io.quarkus] (Quarkus Main Thread) quarkus-test stopped in 0.039s
Process finished with exit code 0

相关问题