基于开源作业调度框架Quartz实现的定时任务1---配置化

    xiaoxiao2024-10-09  78

    什么是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)