JAVA WEB 项目后台定时任务的实现方式,非Spring框架

纯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
            
        }
        
    }

    
}

 

你可能感兴趣的:(java常用功能)