大家好,很高兴再次与大家见面,我是你们的朋友全栈君。
一、Quartz简介
在企业应用中,我们常常需要处理定时任务调度,比如每天凌晨生成前一天的报表,每小时生成一次汇总数据等。Quartz是一个著名的任务调度框架,它可以与J2SE和J2EE应用结合,功能非常强大,易于与Spring集成,使用起来非常便捷。
二、Quartz的核心概念
Quartz有三个主要概念:调度器、任务和触发器。简单来说,调度器负责调度各个任务,当某个时刻到来或经过一定时间后,触发器被激活,从而启动特定任务。相关的类和接口包括:
1)JobDetail:顾名思义,用于描述任务的相关信息;
2)Trigger:描述触发Job执行的时间规则。它有两个子类:SimpleTrigger和CronTrigger,前者用于每隔一定时间执行,后者用于定义日历相关的重复时间间隔,如每天凌晨或每周一运行,通过Cron表达式可以定义复杂的调度方案。
3)Scheduler:代表一个独立运行的Quartz容器,Trigger和JobDetail需要注册到Scheduler中才能生效,即让调度器知道有哪些触发器和任务,以便按规则调度任务。
三、在Spring中使用Quartz
1,所需的jar包:quartz.jar,spring.jar,commons-collections-3.2.jar;
2,添加业务逻辑类(简单示例):
public class UserHeartBeat {
public void Show() {
Calendar cal = Calendar.getInstance();
long date = cal.getTime().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String result = sdf.format(date);
System.out.println(result);
System.out.println("Spring Quartz Test");
}
<pre class="brush:php;toolbar:false;"><code>public static void main(String args[]) {
new UserHeartBeat().Show();
}</code>}
这个类定义了每隔一段时间要执行的操作。
3,配置文件(applicationContext.xml) 用于配置定时任务:
<?xml version="1.0" encoding="UTF-8"?>ttps://www.php.cn/link/91d34433e0793908f20c5e6fdbcba61c">http://www.springframework.org/dtd/spring-beans.dtd"> <beans><bean id="MyJob" class="com.abin.spring.quartz.UserHeartBeat"></bean><bean id="JobWork" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject"><ref bean="MyJob"></ref></property><property name="targetMethod"><value>Show</value></property></bean><bean id="JobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><ref bean="JobWork"></ref></property><property name="cronExpression"><value>10,15,20,25,30,35,40,45,50,55 <em> </em> <em> </em> ?</value></property></bean><bean id="JobSchedule" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autowire="no"><property name="triggers"><list><ref bean="JobTrigger"></ref></list></property></bean></beans>
其中,间隔时间的配置说明见定时任务配置的间隔配置说明。
4.在主配置文件web.xml中注册定时任务的配置文件(applicationContext.xml)
<servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/ApplicationContext.xml</param-value></context-param>
5.定义一个测试类来调用定时任务
public static void main(String[] args) {
System.out.println("Spring Quartz test start...");
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
// 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
System.out.println("Spring Quartz test end...");
}
运行效果图如下:

案例下载地址:实用的spring+quartz实现定时任务-源码世界
发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/ebe44c013549fd1a935942582bea7b80
原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南









