基於開源作業調度框架Quartz實現的定時任務1---配置化

什麼是Quartz
        Quartz是OpenSymphony開源組織在Job scheduling領域的開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或爲運行十個,百個,甚至是好幾萬個Jobs這樣複雜的日程序表。Jobs可以做成標準的Java組件或 EJBs。

Quartz是一個任務日程管理系統,一個在預先確定(被納入日程)的時間到達時,負責執行(或者通知)其他軟件組件的系統。

Quartz用一個小Java庫發佈文件(.jar文件),這個庫文件包含了所有Quartz核心功能。這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操作,例如:將任務納入日程或者從日程中取消,開始/停止/暫停日程進度。

spring整合Quartz的maven依賴

<!--定時任務-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>

 Quartz框架的核心對象

1、Scheduler – 核心調度器

2、Job – 任務

3、JobDetail – 任務描述

4、Trigger  -- 觸發器

對象間的關係

完整的quartz整合spring用例

首先寫任務類

package com.quartz;

import org.quartz.JobExecutionException;

import java.util.Date;

/**
 * @Author :MrYu
 * @Description : 任務類
 * 創建時間 :2019/5/26 on 6:04
 */
public class Schedule1 {
    int i=0;


    public void execute() throws JobExecutionException {
        i++;
        System.out.println("第"+i+"次執行,時間爲"+new Date());
    }
}

詳細配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/task
		http://www.springframework.org/schema/task/spring-task.xsd">

    <!-- 註冊任務類-->
    <bean id="schedule1" class="com.quartz.Schedule1"></bean>

    <!--將Job類配置JobDetail-->
    <bean id="SpringQtzJobMethod"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="schedule1"/><!--任務類-->
        </property>
        <property name="targetMethod"> <!-- 要執行的方法名稱 -->
            <value>execute</value>
        </property>
    </bean>

    <!--配置調度觸發器-->
    <bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean ">
        <property name="jobDetail" ref="SpringQtzJobMethod"></property>
        <property name="cronExpression" value="0/5 * * * * ?"></property>
    </bean>

    <!-- 配置調度工廠-->
    <bean id="SpringJobSchedulerFactoryBean"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTriggerFactoryBean"/>
            </list>
        </property>
    </bean>
</beans>

測試用例:

package com.quartz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author :MrYu
 * @Description : 基於Quartz的定時任務
 * 注意:不能用@Test測試,完全測試部出來效果的
 * 創建時間 :2019/5/26 on 4:28
 */
public class TestSpringQuartz {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/application-quartz.xml");
    }
}

執行結果:

[ INFO ] - [ org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:513) ] Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4926097b: startup date [Sun May 26 06:16:25 CST 2019]; root of context hierarchy
[ INFO ] - [ org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:316) ] Loading XML bean definitions from class path resource [spring/application-quartz.xml]
[ INFO ] - [ org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1184) ] Using default implementation for ThreadExecutor
[ INFO ] - [ org.quartz.core.SchedulerSignalerImpl.<init>(SchedulerSignalerImpl.java:61) ] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[ INFO ] - [ org.quartz.core.QuartzScheduler.<init>(QuartzScheduler.java:240) ] Quartz Scheduler v.2.2.1 created.
[ INFO ] - [ org.quartz.simpl.RAMJobStore.initialize(RAMJobStore.java:155) ] RAMJobStore initialized.
[ INFO ] - [ org.quartz.core.QuartzScheduler.initialize(QuartzScheduler.java:305) ] Scheduler meta-data: Quartz Scheduler (v2.2.1) 'SpringJobSchedulerFactoryBean' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

[ INFO ] - [ org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1339) ] Quartz scheduler 'SpringJobSchedulerFactoryBean' initialized from an externally provided properties instance.
[ INFO ] - [ org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1343) ] Quartz scheduler version: 2.2.1
[ INFO ] - [ org.quartz.core.QuartzScheduler.setJobFactory(QuartzScheduler.java:2311) ] JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@3bd94634
[ INFO ] - [ org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:341) ] Starting beans in phase 2147483647
[ INFO ] - [ org.springframework.scheduling.quartz.SchedulerFactoryBean.startScheduler(SchedulerFactoryBean.java:649) ] Starting Quartz Scheduler now
[ INFO ] - [ org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:575) ] Scheduler SpringJobSchedulerFactoryBean_$_NON_CLUSTERED started.
第1次執行,時間爲Sun May 26 06:16:26 CST 2019
第2次執行,時間爲Sun May 26 06:16:30 CST 2019
第3次執行,時間爲Sun May 26 06:16:35 CST 2019
第4次執行,時間爲Sun May 26 06:16:40 CST 2019
第5次執行,時間爲Sun May 26 06:16:45 CST 2019
第6次執行,時間爲Sun May 26 06:16:50 CST 2019
第7次執行,時間爲Sun May 26 06:16:55 CST 2019
第8次執行,時間爲Sun May 26 06:17:00 CST 2019
第9次執行,時間爲Sun May 26 06:17:05 CST 2019
第10次執行,時間爲Sun May 26 06:17:10 CST 2019
第11次執行,時間爲Sun May 26 06:17:15 CST 2019
第12次執行,時間爲Sun May 26 06:17:20 CST 2019
第13次執行,時間爲Sun May 26 06:17:25 CST 2019
第14次執行,時間爲Sun May 26 06:17:30 CST 2019
第15次執行,時間爲Sun May 26 06:17:35 CST 2019
第16次執行,時間爲Sun May 26 06:17:40 CST 2019
第17次執行,時間爲Sun May 26 06:17:45 CST 2019
第18次執行,時間爲Sun May 26 06:17:50 CST 2019

 

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