Java Spring中Quartz調(diào)度器詳解及實例
一、Quartz的特點
* 按作業(yè)類的繼承方式來分,主要有以下兩種:
1.作業(yè)類繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
2.作業(yè)類不繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
注:個人比較推崇第二種,因為這種方式下的作業(yè)類仍然是POJO。
* 按任務(wù)調(diào)度的觸發(fā)時機來分,主要有以下兩種:
1.每隔指定時間則觸發(fā)一次,對應(yīng)的調(diào)度器為org.springframework.scheduling.quartz.SimpleTriggerBean
2.每到指定時間則觸發(fā)一次,對應(yīng)的調(diào)度器為org.springframework.scheduling.quartz.CronTriggerBean
注:這兩種觸發(fā)方式均可以跟兩種作業(yè)繼承方式相互組合來使用。
下面簡單演示一下在spring對Quartz的用法。
二、作業(yè)類繼承org.springframework.scheduling.quartz.QuartzJobBean類,每到指定時間則觸發(fā)一次
1.編寫作業(yè)類
package bean.jobDetailBean;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean {
private int timeout;
private static int i = 0;
//調(diào)度工廠實例化后,經(jīng)過timeout時間開始執(zhí)行調(diào)度
public void setTimeout(int timeout) {
this.timeout = timeout;
}
/**
* 要調(diào)度的具體任務(wù)
*/
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println("繼承QuartzJobBean的方式-調(diào)度" + ++i + "進行中...");
}
}
2.配置作業(yè)類
<!-- 作業(yè)使用繼承QuartzJobBean的方式 --> <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="bean.jobDetailBean.Job1" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
3.配置作業(yè)調(diào)度的觸發(fā)方式
<!-- 對應(yīng)于作業(yè)繼QuartzJobBean類的方式 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job1" /> <!-- "cronExpression"的配置說明 字段 允許值 允許的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小時 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可選) 留空, 1970-2099 , - * / - 區(qū)間 * 通配符 ? 你不想設(shè)置那個字段 --> <!-- 每分鐘的第0,10,20,30,40,50秒調(diào)度一次 --> <property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" /> </bean>
4.配置調(diào)度工廠
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean>
5.開啟調(diào)度
package test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ScheduleTest {
public static void main(String[] args){
<span style="white-space:pre"> </span>BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
}
}
三、作業(yè)類不繼承org.springframework.scheduling.quartz.QuartzJobBean類,每隔指定時間則觸發(fā)一次
1.編寫作業(yè)類
package bean.jobDetailBean;
public class Job2 {
private static int i = 0;
public void doJob2() {
System.out.println("不繼承QuartzJobBean方式-調(diào)度" + ++i + "進行中...");
}
}
2.配置作業(yè)類
<bean id="job2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="bean.jobDetailBean.Job2" /> </property> <property name="targetMethod" value="doJob2" /> <property name="concurrent" value="false" /><!-- 作業(yè)不并發(fā)調(diào)度 --> </bean>
3.配置作業(yè)調(diào)度的觸發(fā)方式
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job2" /> <property name="startDelay" value="0" /><!-- 調(diào)度工廠實例化后,經(jīng)過0秒開始執(zhí)行調(diào)度 --> <property name="repeatInterval" value="2000" /><!-- 每2秒調(diào)度一次 --> </bean>
4.配置調(diào)度工廠
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> </list> </property> </bean>
5.開啟調(diào)度
package test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ScheduleTest {
public static void main(String[] args){
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
}
}
簡單說明spring自帶調(diào)度器的例子。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解
這篇文章主要為大家介紹了Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Java避免UTF-8的csv文件打開中文出現(xiàn)亂碼的方法
這篇文章主要介紹了Java避免UTF-8的csv文件打開中文出現(xiàn)亂碼的方法,結(jié)合實例形式分析了java操作csv文件時使用utf-16le編碼與utf8編碼相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Springboot?application.yml配置文件拆分方式
這篇文章主要介紹了Springboot?application.yml配置文件拆分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

