Я должен сделать периодическую операцию (назовите метод Java) в моем веб-приложении (jsp на коте). Как я могу сделать это? Демон Java или решения других?
Вы можете использовать ScheduledExecutorService
для периодического выполнения задачи. Однако, если вам требуется более сложное cron-подобное планирование, обратите внимание на Quartz. В частности, я бы рекомендовал использовать Quartz в сочетании с Spring, если вы пойдете по этому пути, так как он предоставляет более приятный API и позволяет вам управлять запуском заданий в конфигурации.
Пример ScheduledExecutorService (взято из Javadoc)
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}
Ответ Адамса прямо на деньгах. Если вы в конечном итоге откатываете свой собственный (вместо того, чтобы идти по кварцевому пути), вы захотите начать работу с ServletContextListener . Вот пример использования java.util.Timer, который является более или менее тупой версией ScheduledExexutorPool.
public class TimerTaskServletContextListener implements ServletContextListener
{
private Timer timer;
public void contextDestroyed( ServletContextEvent sce )
{
if (timer != null) {
timer.cancel();
}
}
public void contextInitialized( ServletContextEvent sce )
{
Timer timer = new Timer();
TimerTask myTask = new TimerTask() {
@Override
public void run()
{
System.out.println("I'm doing awesome stuff right now.");
}
};
long delay = 0;
long period = 10 * 1000; // 10 seconds;
timer.schedule( myTask, delay, period );
}
}
А потом это помещается в ваш web.xml
<listener>
<listener-class>com.TimerTaskServletContextListener</listener-class>
</listener>
Еще больше пищи для размышлений!