1. 程式人生 > >Spring:定時任務定時器 Quartz的使用

Spring:定時任務定時器 Quartz的使用

Quartz的使用方式

配置檔案方式

一、引入依賴

<!-- spring 其他依賴省略 -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId
>
<version>${spring.version}</version> </dependency> <!-- Quartz依賴 --> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId
>
quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.3.0</version>
</dependency>

二、建立自定義task類

public class MyTask {

    //定時任務執行的方法
    public void execute() {
        System.out.println("當前系統時間:" + new Date().toLocaleString());
    }

}

三、配置spring的配置檔案

配置任務類(MyTask)
<!--配置我們自定義的任務類-->
<bean id="myTask" class="top.wintp.crud.task.MyTask"/>
配置任務詳情(jobDetail)
   <bean id="jobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <!--配置用到的job示例(目標物件)-->
        <property name="targetObject" ref="myTask"/>

        <!--job中需要執行的方法(目標方法)-->
        <property name="targetMethod" value="execute"></property>

    </bean>
配置觸發器

    <!--配置觸發器(配置任務執行時間)-->
    <bean id="cronTriggerFactoryBean"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

        <!--注入任務詳情-->
        <property name="jobDetail" ref="jobDetail"/>

        <!--設定任務執行的時間(使用cron表示式進行標識)  即通過表示式進行指定任務執行的時間點-->
        <property name="cronExpression">
            <!--每兩秒執行一次-->
            <value>0/2 * * * * ?</value>
        </property>

    </bean>
配置排程工廠
 <!--配置排程工廠-->
    <bean id="schedulerFactoryBean"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTriggerFactoryBean"/>
                <!--可以配置多個-->
            </list>
        </property>
    </bean>

配置都是固定的,如果我們新增一個定時任務,僅僅只需要新增一個自定義的task類。新增一個任務詳情(修改執行的方法以及任務類的引用),新增觸發器(修改cron表示式)。將我們新增的觸發器新增到排程工廠的triggers的引用中即可。
cron表示式線上生成網址(百度上有很多,請自行百度)

四、測試類測試是否成功

public class TestMyQuartz {

    public static void main(String[] args) {
        ApplicationContext context
                = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

    }

}

核心概念

1、scheduler是一個計劃排程器容器,容器裡面可以盛放眾多的JobDetail和trigger,當容器啟動後,裡面的每個JobDetail都會根據trigger按部就班自動去執行。

2、JobDetail是一個可執行的工作,它本身可能是有狀態的。

3、Trigger觸發器代表一個排程引數的配置,什麼時候去調。

4、當JobDetail和Trigger在scheduler容器上註冊後,形成了裝配好的作業(JobDetail和Trigger所組成的一對兒),就可以伴隨容器啟動而排程執行了。

5、scheduler是個容器,容器中有一個執行緒池,用來並行排程執行每個作業,這樣可以提高容器效率。