任务调度框架:Quartz

理解:任务调度简单的理解就是指定程序在什么事件干什么事,周期是多少。具体在现实中的应用就是邮件提醒功能或者短信提醒功能。程序会在你设定的时间内执行你编写的语句,就是任务调度。其中有JDK的Timer, Quartz 、 Spring Task 、 (分布式的ElasticJob)。本文结合spring框架做一个简单的Demo,使初学者能够理解Quartz。

1、建立一个Maven工程

1.1 添加依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.zhc1024</groupId>  
  <artifactId>quartz_demo</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <!--定时任务 -->
    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.3</version>
    </dependency>
    <!-- Spring框架 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <!--日志包-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>
</project>

1.2 编写任务类

package com.zhc1024;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *需要定时执行的语句类
 */
public class Task {

    public void execute(){

        String time = new SimpleDateFormat().format(new Date());

        System.out.println("执行定时方法了" + time);
    }
}

1.3 编写web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">

	<!--启动spring-->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/applicationContext-quartz.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

</web-app>

1.4 编写配置文件

注意跟上面web配置在同一路径和名字

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

    <!--Spring整合Quartz-->

    <!--1.创建任务对象: 你要做什么?即指定任务类-->
    <bean id="task" class="com.zhc1024.Task"/>

    <!--2.创建JobDetail对象: 你要干什么?-->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--2.1 指定任务对象-->
        <property name="targetObject" ref="task"/>
        <!--2.2 指定任务方法-->
        <property name="targetMethod" value="execute"/>
    </bean>

    <!--3.创建Trigger触发:你在什么时候干?-->
    <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!--3.1 关联jobDetail-->
        <property name="jobDetail" ref="jobDetail"/>
        <!--3.2 *** 任务表达式 *** 每5秒触发一次-->
        <property name="cronExpression" value="0/5 * * * * ? *"/><!--秒 分 时 日 月 周几 年-->
    </bean>

    <!--4.创建任务调用对象:JobDetail+Trigger:你在什么时候干什么? -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <!--4.1 关联trigger-->
        <property name="triggers">
            <array>
                <ref bean="trigger"/>
            </array>
        </property>
    </bean>
</beans>

1.5 启动Tomcat完成

在这里插入图片描述

1.6 关于时间设置

* * * * * ? * 代表:秒 分 时 日 月 周几 年,其中周几用问号代替,不然会报错
表达式意义
"0 0 12 * *?" 每天中午12点触发
"0 15 10 ? **" 每天上午10:15触发
"0 15 10 * *?" 每天上午10:15触发
"0 15 10 * * ?*" 每天上午10:15触发
"0 15 10 * * ?2005" 2005年的每天上午10:15触发
"0 * 14 * *?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * *?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 ** ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * *?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? *MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 *?" 每月15日上午10:15触发
"0 15 10 L *?" 每月最后一日的上午10:15触发
"0 15 10 ? *6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? *6#3" 每月的第三个星期五上午10:15触发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值