JDK定时器

  • Java项目中常使用的定时器有JDK Timer、Quartz、Spring Task等三种。Quartz的功能强大,配置也比较复杂,适合大型、多定时任务的项目使用。Spring Task配置较为简单轻量,需要Spring框架支持。JDK自带的定时器Timer使用灵活,配置简单,适合中小型项目。
  • 项目需要引入的类:java.util.Timer、java.util.TimerTask;
  • 定时需要有一个触发的方法,本例示范的是使用监听器实现定时任务触发
  • 配置如下:web.xml加入监听配置:

    com.project.controller.test.JdkTaskInstance
  • 在com.project.controller.test下新建JdkTaskInstance类:
package com.project.controller.test;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class JdkTaskInstance  implements ServletContextListener{
    private static final long PERIODTIME = 1* 60 * 1000;// 1分钟
    @Override
    //实例化方法
    public void contextInitialized(ServletContextEvent sce) {
            Timer timer = new Timer();
            TaskMethod task = new TaskMethod();
            int PERIOD = 1;
            timer.schedule(task, 0, PERIOD*PERIODTIME);

            //以下api讲解摘抄自网络
            // 第一种方法:指定任务task在指定时间time执行
            //schedule(TimerTask task, Date time)
            // 第二种方法:指定任务task在指定延迟delay后执行
            //schedule(TimerTask task, long delay)  
            // 第三种方法:指定任务task在指定时间firstTime执行后,进行重复固定延迟频率peroid的执行   
            // schedule(TimerTask task, Date firstTime,long period) 
            // 第四种方法:指定任务task 在指定延迟delay 后,进行重复固定延迟频率peroid的执行    
            // schedule(TimerTask task, long delay, long period)   
            // 第五种方法:指定任务task在指定时间firstTime执行后,进行重复固定延迟频率peroid的执行    
            // scheduleAtFixedRate(TimerTask task,Date firstTime,long period) 
            // 第六种方法:指定任务task 在指定延迟delay 后,进行重复固定延迟频率peroid的执行   
            // scheduleAtFixedRate(TimerTask task, long delay, long period)
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}
  • 定时任务方法:
package com.project.controller.test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
public class TaskMethod extends TimerTask{
    public void run() {
        Date dt = new Date();  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");  
        TextToFile("D:\\Task.txt","定时执行 :"+sdf.format(dt));
    }
    public void TextToFile(final String strFilename, final String strBuffer)  
      {  
        try{      
          File fileText = new File(strFilename);  
          if (!fileText.exists()) {
              fileText.createNewFile();
          }
          FileWriter fileWriter = new FileWriter(fileText,true);  
          PrintWriter out = new PrintWriter(fileWriter); 
          out.println(strBuffer);
          out.close(); 
          fileWriter.close();  
        }  
        catch (IOException e)  
        {  
          e.printStackTrace();  
        }  
      }  
}

执行结果如下,在D盘的Task.txt文件中写入了数据:

定时执行 :2018年03月06日 16时46分52秒
定时执行 :2018年03月06日 16时47分52秒
定时执行 :2018年03月06日 16时48分52秒

你可能感兴趣的:(定时器)