【问题标题】:Jax rs: How can I run a method automatically everytime my server restarts?Jax rs:如何在每次服务器重新启动时自动运行方法?
【发布时间】:2015-07-27 10:17:20
【问题描述】:

我做了一个 jax rs jersey web 服务。服务器重新启动时,我必须从数据库加载数据。我现在正在做的是调用这个网址

http://localhost:8080/jersey-openshift-quickstart2/logisure/load

它从数据库中加载数据,并通过调用一个线程每 20 秒更新一次。基于这些数据,其他 API 功能起作用。现在,当我将它部署在云上时,我发现服务器每 2-3 天重启一次,所以我需要我的网络服务自动调用

http://localhost:8080/jersey-openshift-quickstart2/logisure/load

当我的服务器重新启动时。我该怎么做?

【问题讨论】:

    标签: java web-services rest jax-rs


    【解决方案1】:

    您可以编写一个 ServletContextListener 从 contextInitialized() 方法调用您的方法。您将侦听器附加到 web.xml 中的 webapp,例如

    <listener>
       <listener-class>listeners.MyListener</listener-class>
    </listener>
    

    或者,如果您使用的是 Java 配置而不是 web.xml,则可以使用 Java 代码进行等效操作。

    这是您的上下文侦听器的代码:

    package listeners;
    
    public class MyListener implements javax.servlet.ServletContextListener {
    
       public void contextInitialized(ServletContext context) {
          //load data here
       }
    }
    

    这适用于任何 Servlet 容器和任何框架(您不依赖于 Jersey)。

    【讨论】:

      【解决方案2】:

      我假设你启动了一个 tomcat?如果是,您可以在启动时加载的 web.xml 中指定一个 servlet:

      crunchify看这个例子:

      <servlet>
          <servlet-name>CrunchifyExample</servlet-name>
          <servlet-class>com.crunchify.tutorials.CrunchifyExample</servlet-class>
          <load-on-startup>1</load-on-startup>
      </servlet>
      

      如果您使用 JBoss 和 EJB,您也可以查看 Timer EJBs - 但我不确定你是否可以在开始后立即执行其中一个,并且只能执行一次 - 或者 @Startup annotationhere

      使用其中一种可能性,您可以从那里调用您的网络服务,或者您可以实现您在服务中实现的任何内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-13
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 2014-09-27
        相关资源
        最近更新 更多