首页 > 解决方案 > JAX-RS:如何在启动时运行方法(没有 servlet)

问题描述

我有一个 JAX-RS (Jersey) 服务器,用于注册和绑定我的东西。

我想在服务器启动时打印横幅。我想使用 JAX-RS 框架而不是Web 服务器的平台(即,没有 Jetty、Netty、Thorntail 等钩子)来做到这一点。

我看到以下内容提到了经过验证的真实 Servlet 做事方式: Jax rs:如何在每次服务器重新启动时自动运行方法?,但这不起作用,因为我没有在我的服务器中运行 servlet 容器,因此永远不会进行生命周期调用。

我想一定有一个 JCA-ish 类型的对象,我可以注册Application/ResourceConfig有这样的生命周期调用,但我什至找不到任何你可以实际注册的东西的列表。

不要抱怨(但我会),但我无法确定这是否如此困难,因为当他们将项目移至 eclipse 时,他们破坏了旧官方文档的每个超链接,或者它只是像 Spring 一样隐含,以至于它只通过 github'ing 其他人的代码并意识到“哦,我不知道你能做到这一点”来工作。

标签: jerseyjax-rs

解决方案


Jersey 有Event Listeners。你会想要使用ApplicationEventListener并且ApplicationEvent.Type你可能想要听的来打印横幅是INITIALIZATION_FINISHED

public class MyApplicationEventListener
            implements ApplicationEventListener {

    @Override
    public void onEvent(ApplicationEvent event) {
        switch (event.getType()) {
            case INITIALIZATION_FINISHED:
                printBanner();
                break;
        }
    }

    @Override
    public RequestEventListener onRequest(RequestEvent requestEvent) {
        return null;
    }
}

推荐阅读