纯java web项目没有运用spring等框架,后台定时执行周期性任务网上的方式主要有如下几种:
1.jdk自带的Timer和TimeTask
2.ScheduledExecutorService
3.使用Quartz,如果项目是Spring类型的,整合起来还比较方便,纯java看起来就有点杂乱和繁琐
1和2的方法类似,创建一个任务,在Timer和ScheduledExecutorService中按照指定时间间隔周期性执行,或执行性一次。
最后用@WebListener注解或在web.xml中新增
类的全路径
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class BackgroundJobManager implements ServletContextListener {
private Timer timer;
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent sce) {
//容器初始化
timer.schedule(new TestTimerTask(), 0, 1000);
// TODO Auto-generated method stub
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Job(), 0, 5, TimeUnit.SECONDS);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//容器销毁
// TODO Auto-generated method stub
scheduler.shutdownNow();
timer.cancel();
}
private class Job implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
//捕获所有异常,如果有漏掉没有捕获的异常,定时任务将会终止
try{}
catch(){}
}
}
private class TestTimerTask extends TimerTask{
@Override
public void run() {
//捕获所有异常,如果有漏掉没有捕获的异常,定时任务将会终止
try{}
catch(){}
// TODO Auto-generated method stub
}
}
}