Jax rs:每次服务器重启时如何自动运行方法?

时间:2015-07-27 10:17:20

标签: java web-services rest jax-rs

我制作了一个jax rs jersey网络服务。我必须在服务器重启时从数据库加载数据。我现在正在做的是调用此URL

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以编写一个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容器和任何框架(你不依赖泽西岛)。

答案 1 :(得分: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

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