Timer类实现定时调度

使用timer类定时调度,生成文件

timer类需要通过监听器来初始化定时器,web容器在运行时自动加载

  1. 先写个定时任务类CreateFileTask,继承至TimerTask,需要重写run()方法
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.TimerTask;
public class CreateFileTask extends TimerTask {
    //重写的run方法
    @Override
    public void run() {
        //写入的文件数据
        String content="";
        //文件路径
        String path = File.separator + "xxxx";
        //文件名称
        String fileName ="xxx.avl";
        
        //表示是否重新写入,为true表示重头开始写,为false时文件存在则接着文件内容尾部写入数据
        boolean writeflag = false;
        /**
         * 此处省略获取数据内容代码
         * 。。。。
         * byte[] b1 = {0x01};//以16进制“01”作为内容分隔符
         *String b1Str = new String(b1);
         */
        //执行的任务
        this.writerFileDate(content, getCreateFile(path, fileName), writeflag);
    }
    
    /**
     * 创建文件路径,并获取文件名
     * @return
     */
    public String getCreateFile(String path,String fileName){
        File file = new File(path+fileName);
        if(!file.exists()){//文件不存在
            file.getParentFile().mkdirs();//创建文件目录
        }
        return path+fileName;
    }
    
    /**
     * 数据写入到文件
     * @param content
     */
    public void writerFileDate(String content,String fileName,boolean writeflag){
        BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(fileName,writeflag)));
            bw.write(content);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(bw!=null){
                    bw.close();// 关闭输出流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
}

2.写一个监听器CreateFileListener类,实现ServletContextListener,重写contextDestroyed,contextInitialized两个方法

com.test.listener
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class CreateFileListener implements ServletContextListener  {
    private Timer timer;
    /**
     * 销毁
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        
    }
    /**
     * 初始化定时器
     * web 程序运行时候自动加载 
     */
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        /**   
         * 设置一个定时器   
         */
        timer = new Timer();
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);    
        int month = calendar.get(Calendar.MONTH);    
        int day =calendar.get(Calendar.DAY_OF_MONTH);//每天    
        //定制每天的1:00:00执行
        calendar.set(year, month, day, 12, 46, 00);  
        Date taskDate = calendar.getTime();
        //重复执行时间:每隔60秒重复执行
        int period = 60*1000;
        //注意:schedule没有period时是不会重复执行的,即只执行一次,详细内容参照api文档
        timer.schedule(new CreateFileTask(arg0.getServletContext()) , taskDate, period);
    }

3.web文件配置监听器

代码:

<!-- 加载spring监听器 -->

<!-- 加载spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener<stener-class>
    <stener>
    <listener>
        <listener-class>com.zzq.survey.listener.CardPayReportTaskListener</listener-class>
    <stener>

注:在启动tomcat的时候,就会自动加载web容器,会立马自动执行一次timer定时调度。

时间: 2024-10-23 14:48:20

Timer类实现定时调度的相关文章

本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel

本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, fields : [ 'MONTH_' ], data : [ { MONTH_ : '1' }, { MONTH_ : '2' }, { MONTH_ : '3' }, { MONTH_ : '4' }, { MONTH_ : '5' }, { MONTH_ : '6' }, { MONTH_ :

Java定时任务:利用java Timer类实现定时执行任务的功能

一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务,具体要执行的代码写在TimerTask需要被实现的run方法中. 二.先看一个最简单的例子 我们通过代码来说明 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Java:利用java Timer类实现定时执行任务的功能

一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务.TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务,具体要执行的代码写在TimerTask需要被实现的run方法中. 二.先看一个最简单的例子 我们通过代码来说明 import java.text.SimpleDateFormat; import java.util.Date; import java.util.Ti

Arrays类和Timer类(定时调度)

Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行.该功能要与TimerTask配合使用.TimerTask类用来实现由Timer安排的一次或重复执行的某一任务. 每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则可能会延迟后续任务的执行. TimerTask类是一个抽象类,如果要使用该类,需要自己建立一个类来继承此类,并实现其中的抽象方法. TimerTask的子类: // 完成具体的任务操作 import jav

Timer类调度任务

Timer类中常用的方法有: public void schedule(TimerTask task,long delay,long period): 重复地以固定的延迟时间去执行一个任务.public void scheduleAtFixedRate(TimerTask,long delay, long period): 重复地以固定的频率去执行一个任务. public void cancel();   终止计时器, 丢弃所有当前已安排的任务. Timer类调度任务,布布扣,bubuko.co

使用System.Timers.Timer类实现程序定时执行

使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和System.Timers.Timer类. System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Consol

C#多线程 定时重复调用异步线程即System.Threading.Timer类使用小例

1.System.Threading.Timer计时器提供了一种重复调用异步线程的方法..Net BCL中有多个Timer类,如用于Windows应用程序的System.Windows.Forms.Timer类,如可以运行在用户接口线程或工作线程上的System.Timers.Timer类.它们是很不一样的,这里要讲的System.Threading.Timer类是一种定时调用某个异步线程的类.每次计时器到设定的时间,系统就去线程池中开启一个线程运行提供的回调方法. 2.调用这个Timer类的重

Spring进阶-怎样集成定时调度Quartz

在一些项目里面比如进销存系统,对一些过期图片的定时清理或者库存不足发出预警提示,就需要用到定时调度技术. 每当经过一段时间,程序会自动执行,就是定时调度.如果要使用定时调度,则必须保证程序始终运行才行哦,也就是说定时调度是在程序之外又启动了一个新的线程.那么怎样才能实现定时调度呢? 方案一:可以使用JDK自带的java.util.Timer对象.可以创建定制的timer或者调用某些方法的timer.包装timer的工作由Spring TimerFactoryBean完成,不过这种方法不能准确设置

java.util.Timer类似于闹钟定时做任务

在web中实现任务计划,相当于实现闹钟的功能,要完成2个步骤: 1.定时器的设置: 2.对这个定时器的启动运行和停止进行实时监听 java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类方式创建. Timer是一种线程设施,用于安排以后在后台线程执行的任务,可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可调度TimerTas