定时任务组件Quartz

介绍

可以使用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>

入门

  1. 创建项目导入Maven坐标

  2. 自定义Job

    import java.util.Date;
    
    /**
     * 自定义Job
     */
    public class JobDemo {
        public void run(){
            System.out.println("自定义Job执行了。。。" + new Date());
        }
    }
  3. 配置Spring配置文件spring-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等

    <?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:context="http://www.springframework.org/schema/context"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans.xsd
                         http://www.springframework.org/schema/mvc
                         http://www.springframework.org/schema/mvc/spring-mvc.xsd
                         http://code.alibabatech.com/schema/dubbo
                         http://code.alibabatech.com/schema/dubbo/dubbo.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 注册自定义Job -->
        <bean id="jobDemo" class="com.itheima.jobs.JobDemo"></bean>
        <!-- 注册JobDetail,作用是负责通过反射调用指定的Job -->
        <bean id="jobDetail"
              class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 注入目标对象 -->
            <property name="targetObject" ref="jobDemo"/>
            <!-- 注入目标方法 -->
            <property name="targetMethod" value="run"/>
        </bean>
        <!-- 注册一个触发器,指定任务触发的时间 -->
        <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <!-- 注入JobDetail -->
            <property name="jobDetail" ref="jobDetail"/>
            <!-- 指定触发的时间,基于Cron表达式 -->
            <property name="cronExpression">
                <value>0/10 * * * * ?</value>
            </property>
        </bean>
        <!-- 注册一个统一的调度工厂,通过这个调度工厂调度任务 -->
        <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <!-- 注入多个触发器 -->
            <property name="triggers">
                <list>
                    <ref bean="myTrigger"/>
                </list>
            </property>
        </bean>
    </beans>
  4. 编写启动类

    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App {
        public static void main(String[] args) {
            new ClassPathXmlApplicationContext("spring-jobs.xml");
        }
    }

cron表达式

0/10 * * * * ?

名称 是否必须 允许值 特殊字符
0-59 ,- * /
0-59 ,- * /
0-23 ,- * /
1-31 ,- * / ? L W C
1-12或JAN-DEC ,- * /
1-7或SUN-SAT ,- * ?/ L C #
空 或 1970-2099 ,- * /

特殊字符介绍:

  1. 逗号(,):指定一个值列表,例如1,4,5,6,表示1月、4月、5月、6月
  2. 横杠(-):指定一个范围,例如3-6,表示3到6月
  3. 星号(*):表示这个域上所有的值
  4. 斜线(/):表示递增,例如0/15表示每15秒
  5. 问号(?):只能用在日和周,但是不能再这两个域上同时使用,表示不指定
  6. 井号(#):只能使用在周域上,用于指定月份中第几周的那一天,例如6#3,意思是某月的第三个周五(6=星期五,3=月份中的第几周)
  7. L:某域上允许的最后一个值,只能使用在日和周域上,当用在日域上,表示的在月域上指定月份的最后一天,用在周上,表示本周的最后一天,也就是星期六
  8. W:W字符代表工作日(星期1-5),只能用在日域上,它用来指定离指定日期的最近的一个工作日

cron表达式在线生成器

在线网站

Last modification:November 9th, 2020 at 11:26 pm
如果觉得我的文章对你有用,请随意赞赏