【问题标题】:Control JAX-RS application startup控制 JAX-RS 应用程序启动
【发布时间】:2019-03-09 22:36:32
【问题描述】:

首先,我是 JAX-RS 的新手。我正在尝试创建一个后端,并且我已经选择了 pom.xml 实现。更具体地说,我有这门课

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("webapi")
public class MyApp extends Application {

}

我想知道如何控制它何时启动并最终阻止它启动。

类似这样的事情:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("webapi")
public class MyApp extends Application {

    @Override
    public void onStartup() {
        if (!Utils.isConfDataValid()) 
            exit(1);
    }

}

我现在才知道任何应用程序事件,或 JAX-RS 中的任何类似事件。

谢谢!

【问题讨论】:

    标签: java maven jax-rs pom.xml


    【解决方案1】:

    请注意,某些类型的事件或挂钩取决于 Web 应用程序服务器。
    在这种情况下,JAX-RS 与您要查找的内容无关。

    另请注意,我不建议使用 System.exit 或终止类似的应用程序。


    由于JAX-RS 基于Servlet 堆栈,您可以注册ServletContextListener 实现以在上下文启动时执行代码。

    public class CustomServletContextListener implements ServletContextListener {
       @Override
       public void contextInitialized(final ServletContextEvent servletContextEvent) {
          // Context startup
       }
    
       @Override
       public void contextDestroyed(final ServletContextEvent servletContextEvent) {
          // Context shutdown
       }
    }
    

    如果您在 Servlet 3+ 环境中,可以通过使用 @WebListener 注释来注册此侦听器

    @WebListener
    public class CustomServletContextListener implements ServletContextListener {
    

    否则你需要使用老式的web.xml文件,如<listener-class>

    【讨论】:

    • 谢谢!我可以以某种方式手动停止应用程序吗?或者,至少,限制它启动?
    • @CosminStoian 您可以抛出 RuntimeException (这取决于应用程序服务器)。或者,您可以设置一个参数并在过滤器中对其进行检查,该过滤器会返回一条错误消息并说明原因。无论如何,您都需要手动重新启动它(或要求容器这样做)。
    猜你喜欢
    • 2018-08-12
    • 2016-12-06
    • 1970-01-01
    • 2010-11-11
    • 2011-01-05
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多