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>

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

  • 相关阅读:
    Java8 Stream Function
    PLINQ (C#/.Net 4.5.1) vs Stream (JDK/Java 8) Performance
    罗素 尊重 《事实》
    小品 《研发的一天》
    Java8 λ表达式 stream group by max then Option then PlainObject
    这人好像一条狗啊。什么是共识?
    TOGAF TheOpenGroup引领开发厂商中立的开放技术标准和认证
    OpenMP vs. MPI
    BPMN2 online draw tools 在线作图工具
    DecisionCamp 2019, Decision Manager, AI, and the Future
  • 原文地址:https://www.cnblogs.com/renjie0520/p/5714102.html
Copyright © 2011-2022 走看看