如何在运行使用JSP / Servlet的应用程序中的特定时间的服务?

我开发JSP / Servlet的应用程序,我想在一个特定的时间来执行服务,例如:

每天上午10点,从“附件”表中删除任何附件里的数据库,在那里字段名column X == NULL。

我怎样才能做到这一点的JSP / Servlet的应用程序? 我用Glassfish的作为服务器。

--------------解决方案-------------

  • EJB3定时服务或
  • 使用Quartz调度库,或
  • 执行像folliwng黑客:

实现ServletContextListenercontextInitialized方法:

ServletContext servletContext = servletContextEvent.getServletContext();
try{
// create the timer and timer task objects
Timer timer = new Timer();
MyTimerTask task = new MyTimerTask(); //this class implements Callable.

// get a calendar to initialize the start time
Calendar calendar = Calendar.getInstance();
Date startTime = calendar.getTime();

// schedule the task to run hourly
timer.scheduleAtFixedRate(task, startTime, 1000 * 60 * 60);

// save our timer for later use
servletContext.setAttribute ("timer", timer);
} catch (Exception e) {
servletContext.log ("Problem initializing the task that was to run hourly: " + e.getMessage ());
}

编辑您的web.xml中有提到你的监听器实现:

<listener>
<listener-class>your.package.declaration.MyServletContextListener</listener-class>
</listener>

您在GlassFish Java EE服务器上运行,所以你应该能够访问EJB定时服务。

下面是一个例子:

http://java-x.blogspot.com/2007/01/ejb-3-timer-service.html

我用以前的版本在JBoss的API,并且工作得很好。

目前我们倾向于放弃石英在战争中使用的定时执行,所以它也适用于我们的码头发展情况

你需要检查服务器实现用于支持烧成这样的任务。 如果它不支持它,或者你想成为独立的服务器,然后实现一个ServletContextListener钩上的web应用的启动和使用ScheduledExecutorService ,在给定的时间和间隔执行任务。

这里有一个基本的开球例如:

public class Config implements ServletContextListener {

private ScheduledExecutorService scheduler;

public void contextInitialized(ServletContextEvent event) {
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Task(), millisToNext1000, 1, TimeUnit.DAYS);
}

public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdown();
}

}

Task实现CallablemillisToNext1000是米利斯的下一个10:00的量。 您可以使用Calendar或JodaTime来计算的话。 作为一个非Java标准的替代方案,也可以考虑使用石英。

分类:java的 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.339 (s). 10 q(s)