最新Spring-4.3.10和quartz-2.2.3整合示例
阿新 • • 發佈:2019-02-01
筆記
Spring 為簡化 Quartz 的操作提供了相關支援類Quartz Scheduler 。方便我們進行任務排程的開發。網上版本大都一大抄,而且時間久遠,無奈去看官方文件,還好Google翻譯很給力,鑽研了一下午,搞定~配置了兩個定時任務,一個是直接呼叫方法不需要繼承任何類的簡單任務,另一個是功能增強的繼承QuartzJobBean的定時任務,可以滿足一般需求了。
jar包準備
<!--Quartz核心庫-->
quartz-2.2.3.jar
<!--日誌記錄,至少需要使用sl4j-api.jar檔案,不然會報錯-->
log4j-1.2.16.jar
log4j-core-2.8.2.jar
log4j-api-2.8.2.jar
slf4j-api-1.7.7.jar
<!--如果log4j實現了slf4j,那麼需要加個轉換器,不然Quartz報錯資訊可能會看不到-->
slf4j-log4j12-1.7.7.jar
<!--Spring jar包-->
spring-core-4.3.10.jar
spring-context-support-4.3.10.jar
spring-context-4.3.10.jar
核心Spring配置檔案
<!--使用簡單作業詳情-->
<bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--配置簡單作業的目標類-->
<property name="targetObject" ref="mySimpleJob"/>
<!--配置簡單作業的目標方法-->
<property name="targetMethod" value="execute"/>
<!--false表示等上一個任務執行完後再開啟新的任務-->
<property name="concurrent" value="false"/>
</bean>
<!--使用定時作業詳情-->
<bean id="cronJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--配置簡單作業的目標類-->
<property name="jobClass" value="com.cheng.utils.quartz.MyCronJob"/>
<!--配置耐久性,如果一個任務不是durable,那麼當沒有Trigger關聯它的時候,它就會被自動刪除-->
<property name="durability" value="true"/>
</bean>
<!--配置簡單觸發器-->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="simpleJobDetail"/>
<!-- 延遲3s執行 -->
<property name="startDelay" value="3000"/>
<!-- 每隔10s執行一次 -->
<property name="repeatInterval" value="10000"/>
</bean>
<!--配置定時觸發器-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="cronJobDetail"/>
<!--每隔5s執行一次-->
<property name="cronExpression" value="*/5 * * * * ?"/>
</bean>
<!--配置排程器工廠-->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--配置觸發器-->
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
任務詳情類
/**
* 定時任務
*/
public class MyCronJob extends QuartzJobBean {
private static int times = 0;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = sdf.format(new Date());
System.out.println("【" + time + "】定時任務第【" + ++times + "】次執行……");
}
}
/**
* 簡單任務
*/
@Component("mySimpleJob")
public class MySimpleJob {
private static int times = 0;
public void execute() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = sdf.format(new Date());
System.out.println("【" + time + "】簡單任務第【" + ++times + "】次執行……");
}
}