java 定時器實現

java工程中,難免遇到須要定時處理任務的需求,有以下兩種方法:java

1.使用java.util.TimerTaskspring

2.使用Quartzthis

1、java.util.TimerTaskspa

Timer timer = new Timer();//定義一個時間管理器code

timer.schedule(task, date, PERIOD_DAY);//task爲定時執行的任務;date執行的時間;PERIOD_DAY執行任務的時間間隔blog

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();
	}

}

  

2、Quartzget

Quartz須要配置cronExpression表達式
具體的cronExpression配置不在贅述,能夠百度具體查看使用說明,本次只關注配置io

<!-- 定義執行定時任務 -->
    <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>

 

此次先總結這兩種方法,歡迎補充及支出錯誤,共同進步!class

相關文章
相關標籤/搜索