Quartz框架是一个轻量级的任务调度框架,它提供了许多内置的功能,包括:支持作业的调度、集群调度、持久化、任务持久化、任务依赖、优先级、并发控制、失败重试等。同时也支持自定义作业类型和触发器类型。与Spring整合步骤如下:
- 引入包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.37</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.3.37</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.37</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.13</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>2.0.13</version> <scope>test</scope> </dependency>
-
写一个类实现Quartz的job接口
/** *Description: *author: ljd *@date 2024年7月3日 *@version 1.0 */ package test.spring.model; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Myjob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("quartz调度执行内容................."); } }
-
在Spring中配置
<!--配置一个工作任务 --> <bean id="myJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="name" value="myQuartzjob"></property> <property name="group" value="myGroup"></property> <!-- jobClass为自己写的job工作类 --> <property name="jobClass" value="test.spring.model.Myjob"></property> <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时,在调度器中会删除该工作任务 --> <property name="durability" value="true"></property> <!--applicationContextJobDataKey为Spring配置文件 --> <property name="applicationContextJobDataKey" value="applicationContext"></property> </bean> <!--配置一个处发器 --> <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="name" value="myTrigger"></property> <property name="group" value="myGroup"></property> <!--jobDetail为要触发的工作,设置多个值 为 jobDetaMap --> <property name="jobDetail" ref="myJob"></property> <!-- 设置执行时间 默认为7位数,从左到右,分别人 “秒 分 时 日 周 月 年” 年可省略,其中*表示任意数,? 表示忽略 --> <!-- 如 : "0/3 * * * * ?" 表示第0秒开始,每三秒执行一次 --> <property name="cronExpression" value="0/3 * * * * ?"></property> </bean> <!--配置调度器 --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="trigger" /> </list> </property> </bean>
-
写一个类测试
/** *Description: *author: ljd *@date 2024年7月3日 *@version 1.0 */ package testSpring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.scheduling.quartz.SchedulerFactoryBean; public class TestScheduller { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); /* 从Spring容器中获取调度器,正常情况是Spring容初始化后,调度器就会自动启动 */ SchedulerFactoryBean scheduler=(SchedulerFactoryBean) ac.getBean("scheduler"); scheduler.start(); } }
测试结果: