zoukankan      html  css  js  c++  java
  • java 定时器实现

    java工程中,不免遇到需要定时处理任务的需求,有如下两种方法:

    1.使用java.util.TimerTask

    2.使用Quartz

    一、java.util.TimerTask

    Timer timer = new Timer();//定义一个时间管理器

    timer.schedule(task, date, PERIOD_DAY);//task为定时执行的任务;date执行的时间;PERIOD_DAY执行任务的时间间隔

    public class TimerManager {
    	// 时间间隔
    	private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
    	//private static final long PERIOD_DAY = 60 * 1000;
    	
    	public TimerManager() {
    		Calendar calendar = Calendar.getInstance();
    		/*** 定制每日2:00执行方法 ***/
    		calendar.set(Calendar.HOUR_OF_DAY, 2);
    		calendar.set(Calendar.MINUTE, 0);
    		calendar.set(Calendar.SECOND, 0);
    
    		Date date = calendar.getTime(); // 第一次执行定时任务的时间
    
    		// 如果第一次执行定时任务的时间 小于 当前的时间
    		// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
    		if (date.before(new Date())) {
    			date = this.addDay(date, 1);
    		}
    
    		Timer timer = new Timer();
    
    		XXXTask task = new XXXTask();
    		// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
    		System.out.println("开始执行任务:"+System.currentTimeMillis());
    		timer.schedule(task, date, PERIOD_DAY);
    		System.out.println("结束执行任务:"+System.currentTimeMillis());
    	}
    
    	// 增加或减少天数
    	public Date addDay(Date date, int num) {
    		Calendar startDT = Calendar.getInstance();
    		startDT.setTime(date);
    		startDT.add(Calendar.DAY_OF_MONTH, num);
    		return startDT.getTime();
    	}
    
    }
    

      

    二、Quartz

    Quartz需要配置cronExpression表达式
    具体的cronExpression配置不在赘述,可以百度具体查看使用说明,本次只关注配置

    <!-- 定义执行定时任务 -->
        <bean id="XXXTaskJob" class="org.springframework.scheduling.quartz.JobDetailBean">
            <property name="jobClass">
                <value>XXXTaskJob工程路径</value>
            </property>
            <property name="jobDataAsMap">
                <map>
                </map>
            </property>        
        </bean>
         <!-- 配置作业调度的触发方式 -->
        <bean id="XXXTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="XXXTaskJob" />
            </property>
            <property name="cronExpression">
                <!-- 每天 7:00 触发 -->
                <value>0 0 7 * * ?</value> 
            </property>
        </bean>        
        
    <!-- 配置调度工厂  -->    
    <bean id="chfschedulerFactoryBean"    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="chf_DwyxTelImportTaskTrigger" />
                </list>
            </property>
        </bean>

    这次先总结这两种方法,欢迎补充及支出错误,共同进步!

  • 相关阅读:
    【docker学习一】CentOS7.5+Docker安装及使用「安装、查看、pull、创建、进入镜像」
    excel for mac打开csv文件不分列
    【java自定义注解2】java自定义注解结合Spring AOP
    【java自定义注解1】java自定义注解-属性
    【jar包管理】Maven BOM
    【JAVA8】Set排序四种写法
    PAT甲题题解-1072. Gas Station (30)-dijkstra最短路
    PAT甲题题解-1073. Scientific Notation (20)-字符串处理
    PAT甲题题解-1074. Reversing Linked List (25)-求反向链表
    PAT甲题题解-1075. PAT Judge (25)-排序
  • 原文地址:https://www.cnblogs.com/renjie0520/p/5714102.html
Copyright © 2011-2022 走看看