基于开源作业调度框架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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值