1. 程式人生 > >最新Spring-4.3.10和quartz-2.2.3整合示例

最新Spring-4.3.10和quartz-2.2.3整合示例

筆記

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 + "】次執行……");
    }
}