Quartz入門(一)-----實現定時功能

Quartz 是一個開源的作業調度框架,能夠用它來爲執行一個作業而創建簡單的或複雜的調度。不囉嗦了,這裏就不做簡介了,直接進入主題!網上的一些代碼看的比較費勁,對於初學的人很費勁,所以搞了一個mini版本的,本文就是圍繞Quartz(與Spring結合)實現一個簡單的定時任務!

1 引入pom文件

    <properties>
        <spring.version>4.0.5.RELEASE</spring.version>
        <quartz.version>2.2.1</quartz.version>
    </properties>

1.1 Spring(4.0.5)

<!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

1.2 Quartz(2.2.1)

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>${quartz.version}</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>${quartz.version}</version>
        </dependency>

備註:spring3.1以上版本才支持 quartz 2.x;spring 3.1以下請使用quartz1.x

2 定時任務類的實現

在Spring中使用Quartz有兩種方式實現:第一種是任務類繼承QuartzJobBean,第二種則是在配置文件裏定義任務類和要執行的方法,類和方法仍然是普通類。本文采用第二種方式,首先寫一個簡單的Mission類(定時任務的具體實現):

public class Mission {

    protected void execute() {
        System.out.println("process the timer task at [" + dateFormat() + "]");
    }

    /**
     * record the time of message
     * 
     * @return
     */
    private String dateFormat() {
        long time = System.currentTimeMillis();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(time);
        return sdf.format(date);
    }

}

3 配置文件(spring.xml)

<bean id="SpringQtzJob" class="com.quartz.demo.Mission"/>  
        <bean id="SpringQtzJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <property name="targetObject">  
            <ref bean="SpringQtzJob"/>  
        </property>  
        <property name="targetMethod">  <!-- 要執行的方法名稱 -->  
            <value>execute</value>  
        </property>  
    </bean>  

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

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

4 測試

在這裏我直接寫一個類運行它的main方法,在該類中加載sping的配置文件。

@Service
@ImportResource("classpath:spring.xml")
public class TaskEnter {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws InterruptedException {
        /**
         * load spring 
         */
        ApplicationContext context = new AnnotationConfigApplicationContext(TaskEnter.class);
        TaskEnter taskEnter = context.getBean(TaskEnter.class);
        System.out.println("start process...");
        TimeUnit.SECONDS.sleep(10000);
    }
}

查看運行結果:
這裏寫圖片描述

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