我制作了一个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
我的服务器重新启动时。我该怎么办?
答案 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 annotation或here
使用其中一种可能性,您可以从那里调用您的网络服务,或者您可以实施您在服务中实施的任何内容