quartz調度

利用timer,spring,quartz進行任務調度


1.利用JDK的java.util.timer java.util.timerTask實現簡單的任務調度、


timerTask代表一個多次執行的任務,實現了runnable接口,可以在run()方法中定義業務邏輯。
timer負責制定調度規則並負責調度timerTask


public class Job extends TimerTask{
static int i = 0;
public void run() {

System.out.println("method一第"+i+++"次調度");
}
public static void main(String[] args) {
Timer timer = new Timer();

//設置執行延遲的時間
timer.schedule(new Job(), 5000);
//設置循環調度的時間間隔
timer.schedule(new Job(), 0,1000);
}
}


2.spring quartz框架集成實現任務調度

導入quartz-all-1.6.0.jar


使用corn觸發器
//spring配置文件中的配置

<!-- 定義調度工廠,配置觸發器 -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerBean"/>
</list>
</property>
<!-- 
<property name="autoStartup" value="true"></property>
<property name="schedulerName" value="cronScheduler" />
-->
</bean>

<!-- 定義觸發器 -->
<bean id = "cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="cronExpression" value="* * * * * ? *"></property>
<!-- 通過該屬性關聯工作類 -->
<property name="jobDetail">
//方式1:通過反射的方式完成任務調度,執行目標對象的目標方法
<!-- 
<bean
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="concurrent">
<value>false</value>
</property>
<property name="targetObject" ref="job" />
<property name="targetMethod" value="run" />
</bean>
-->
//方式2:工作類必須實現QuartzJobBean接口,執行executeInternal方法
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.quartz.task.Job"></property>
//爲工作類的屬性賦值
<property name="jobDataAsMap">
<map>
<entry key = "name" value="kasim"></entry>
</map>
</property>
</bean>

</property>
</bean>
//創建一個工作,若使用反射完成任務調度,則不需要實現QuartzJobBean接口,複寫executeInternal方法
<bean id="job" class="com.quartz.task.Job"></bean>

//工作類
class job{...}


3.cronExpression 觸發器表達式
* * * * * ? * 表示每分每秒都會觸發
| | | | | | |
秒分時日月週年

* 表示所有值. 例如:在分的字段上設置 "*",表示每一分鐘都會觸發。
? 表示不指定值。使用的場景爲不需要關心當前設置這個字段的值。
例如:要在每月的10號觸發一個操作,但不關心是周幾,所以需要周位置的那個字段設置爲"?" 具體設置爲 0 0 0 10 * ?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章