大家好,很高兴再次与大家见面,我是你们的朋友全栈君。
一、Quartz简介
在企业应用中,我们常常需要处理定时任务调度,比如每天凌晨生成前一天的报表,每小时生成一次汇总数据等。Quartz是一个著名的任务调度框架,它可以与J2SE和J2EE应用结合,功能非常强大,易于与spring集成,使用起来非常便捷。
二、Quartz的核心概念
Quartz有三个主要概念:调度器、任务和触发器。简单来说,调度器负责调度各个任务,当某个时刻到来或经过一定时间后,触发器被激活,从而启动特定任务。相关的类和接口包括:
立即学习“Java免费学习笔记(深入)”;
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">public static void main(String args[]) { new UserHeartBeat().Show(); }
}
这个类定义了每隔一段时间要执行的操作。
3,配置文件(applicationContext.xml) 用于配置定时任务:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="https://www.php.cn/link/91d34433e0793908f20c5e6fdbcba61c">http://www.springframework.org/dtd/spring-beans.dtd"></a>; <beans> <bean id="MyJob" class="com.abin.spring.quartz.UserHeartBeat"/> <bean id="JobWork" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="MyJob"/> </property> <property name="targetMethod"> <value>Show</value> </property> </bean> <bean id="JobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="JobWork"/> </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"/> </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