相关zulip聊天
我正在试图弄清楚,在quarkus中启动应用程序时,您应该如何优雅地失败。
public class MyApp implements QuarkusApplication {
@Override
public int run(String... args) throws Exception {
System.out.println("Do startup logic here");
Quarkus.waitForExit();
return 0;
}
void onStart(@Observes StartupEvent ev) {
LOGGER.info("The application is starting...");
}
void onStop(@Observes ShutdownEvent ev) {
LOGGER.info("The application is stopping...");
}
我不确定这是一个功能请求还是一个bug,或者我遗漏了什么,这是正常的行为。
编辑1:我想说清楚:
@Startup
@ApplicationScoped
public class StarterBean {
private static final Logger LOGGER = Logger.getLogger("");
public StarterBean() {
throw new RuntimeException("failed misrably");
}
}
当我使用“/gradlew quarkusDev”运行时,我在控制台中看到异常,但应用程序从不存在。我认为它应该存在。它确实在单元测试期间退出,并正常失败。我尝试在onStart中移动异常,但也没有帮助。我还尝试了启动、应用程序或两者的组合
编辑2:
我通过构建uber jar并运行它来测试它。引发异常不会退出应用程序。同样可以想象,应用程序在docker容器中运行时也会退出。我不明白为什么格拉德尔任务根本不存在。为此,我想我会接受答案。非常感谢你的帮助!
我不确定这里是否有一个很好的答案可以满足所有要求(如果我错了,很高兴被纠正)不确定你到底想实现什么,但有几个选项值得探索:
Quarkus。run()方法中的asyncExit(code)
将允许您优雅地退出,但单元测试不会调用它
您可以在启动时初始化一个bean(用@startup
对其进行注释),该bean会在其构造函数中引发异常,但这并不特别优雅,也不会让您控制状态代码。然而,它似乎返回-1,因此它至少满足了非零退出代码的标准。(遗憾的是,Quarkus.asyncExit(code)
似乎不适用于单元测试,即使它是在测试开始之前在bean初始化中执行的。)
如上所述,但您可以调用系统。在bean构造函数中退出()。这使您可以控制退出代码,但这是最不干净的方法,它只是简单地将VM拖走,而没有任何优雅的清理机会
编辑:刚刚从zulipchat线程中看到这个,它添加了一些必要的上下文:
我需要能够在启动期间保释,如果我看到某些条件(例如缺少环境变量或其他)我应该怎么做?
在这种情况下,我可能会声明一个
@Startup
bean(或多个bean)以基于这些环境变量进行初始化,并确保这些bean的构造函数在条件不正确(缺少环境变量、损坏的环境变量等)时抛出有意义的异常,这有一些优点:
您可以将适当的启动检查分离为不同的bean,强制执行职责分离
问题内容: 我正在阅读出色的在线书籍http://nodebeginner.org/,并尝试了简单的代码 现在我不知道(而且我仍然不知道!)如何优雅地关闭node.js,所以我就去了。现在,每次我尝试运行时,都会收到以下错误消息。 因此,有两个问题: 1)如何正常关闭node.js? 2)如何修复我创建的混乱? 问题答案: 使用+ 优雅地退出节点进程 清理混乱取决于您的平台,但基本上,您需要找到运
遵循本指南:https://quarkus.io/guides/building-native-image 为此,Quarkus通过利用容器运行时(如Docker或podman)提供了创建本地Linux可执行文件的非常方便的方法。完成此任务的最简单方法是执行:./mvnw package-Pnative-Dquarkus.native.container build=true 我收到此错误:[er
我有一个顶级核心.异步运行循环。我想让它无限期地运行,至少直到我用CTRL-C或kill或类似的方式示意它停止。我当前正在使用java.lang.runtime/AddShutDownHook,如下所示: 我想要的也不是。 我不一定期望找到一个适用于所有JVM的解决方案。我在Mac上开发并部署到Ubuntu上,所以我想找到一个同时适用于两者的解决方案: > Mac JVM:java版本“1.7.0
注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch 在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa
我们大致为WebAPplication设计了4个生命周期: 请求初始化其实就是从URL中解析提取出{module}, {action}, {method}; 然后再根据{module}, {action}, {method}找到对应的Controller文件; 然后再调用对应的{method},完了之后再发送响应。当然响应的过程中肯定是要顺带着解析下模板标签啦。 恩,这就完了,貌似感觉很简单啊。
如下图. 可以看出,基本周期是: created mounted updated (update 可以理解成人肉手动操作触发) destroyed 上面步骤中的 1,3,4都是自动触发。 每个步骤都有对应的 beforeXyz方法 所以, 我们一般使用mounted 作为页面初始化时执行的方法