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

Quarkus反应路线:uber jar中的不同行为

皇甫俊雅
2023-03-14

按照本指南,我已将Quarkus应用程序配置为在META-INF/Resources/中找不到文件时返回自定义错误页面。

@ApplicationScoped
public class FileNotFoundHandler {

    @Route(methods = Route.HttpMethod.GET, regex = "^/.+")
    void activate404Intercepting(RoutingContext rc) {
        ((RoutingContextImpl) rc).currentRouter()
                .errorHandler(404, errorContext -> errorContext.response()
                        .sendFile("notfoundpage.html")
                );
        rc.next();
    }

}

当我在开发模式下使用Quarkus在本地运行代码时,这非常好。然而,当我构建优步jar时,行为是不同的:当我尝试访问未知路径时,会超时。

为什么我的优步jar表现不同,我该如何解决这个问题?任何帮助都将不胜感激。

共有1个答案

许安邦
2023-03-14

经过一番调试,我发现在uber jar中调用了actiate404Intercepting,但是相对路径没有找到notfoundpage.html,因为它在另一个位置。

我的解决方案:

@ApplicationScoped
public class FileNotFoundHandler {

    private static final String INDEX_FILE_LOCATION = getPathToIndexFile();

    private static String getPathToIndexFile(){
        return Objects.nonNull(FileNotFoundHandler.class.getClassLoader().getResource("notfoundpage.html")) ?
            "notfoundpage.html" : "META-INF/resources/notfoundpage.html";
    }

    @Route(methods = Route.HttpMethod.GET, regex = "^/.+")
    void activate404Intercepting(RoutingContext rc) {
        ((RoutingContextImpl) rc).currentRouter()
                .errorHandler(404, errorContext -> errorContext.response()
                        .sendFile(INDEX_FILE_LOCATION)
                );
        rc.next();
    }

}
 类似资料:
  • 我有一个带有异步endpoint的quarkus应用程序,它创建一个具有默认属性的实体,在request方法中启动一个新线程,并执行一个长期运行的作业,然后返回该实体作为响应供客户端跟踪。 此外,长时间运行的作业将在实体运行时对其进行更新,因此它也必须是事务性的。但是,数据库实体没有得到更新。 这些是我面临的问题: 收到以下警告: 我尝试使用但没有用。 我尝试在上使用API方法,而不是在指南中提到

  • 我想知道我什么时候该用哪个。我明白它们都集合了所有的依赖类,但是它们彼此之间有什么不同呢?

  • 背景:本周我刚刚开始学习Quarkus,尽管我以前使用过一些流媒体平台(特别是scala中的http4s/fs2)。 工作与夸克斯反应性(与兵变)和任何反应性数据库客户端(兵变反应性postgres,反应性elasticsearch,等)我有点困惑如何正确管理阻塞调用和线程池。 quarkus文档建议使用注释命令式代码或cpu密集型代码,以确保将其转移到工作池以不阻塞IO池。这是有道理的。 考虑以

  • 在代码示例中,在 当react遇到路由组件(react路由器的一部分)的渲染道具时,它会传递什么道具? 鉴于https://reactjs.org/docs/render-props.html ,render prop是一个函数prop,组件使用它来知道要渲染什么,是传递给props的值,该props埋在react router中的Route声明中

  • 在本页React Native State on React Native docs中,我们有以下语句: 道具由父级设置,并且在组件的整个生存期内都是固定的。 但是,在本页React文档上的React State and Lifecycle中,我们有以下声明: 因为this.props和this.state可能是异步更新的,所以不应该依赖它们的值来计算下一个状态。 我的误解在哪里?对我来说,当组件

  • 我在我的项目中使用react router,因为每个路由都有一个问题,在每个路由器路径的开始处都添加了“#”符号。。例如:http://localhost:3000/#/login 我想去掉那个标志,但我自己解决不了。 我的路由程序是在app.jsIM检查用户是否登录,如果没有登录,那么他将重定向到 /login页面。( 下面是app.js 否则他将登录,然后我将使用名为DefaultLayout