Spring整合Quartz定时任务详解 悠悠 2021-12-21 03:47 315阅读 0赞 # Spring整合Quartz定时任务详解 # [Spring quartz定时任务官方网站][Spring quartz] ### 一、概述 ### 用Spring,就是为了简单。 但是我还是要总结下java定时任务实现的几种方式。 * 1.TimerTask,等于一个线程隔一段时间运行一下。 * 2.ScheduledExecutorService,线程池版的TimerTask。 * 3.Spring支持的定时任务,@Schedule注解,支持crontab表达式。 * 4.quartz,比较流行的任务调度工具,就是配置起来麻烦。 上一篇讲了[《Spring整合Schedule定时任务详解 》][Spring_Schedule_],本篇讲述如何整合Quartz做定时任务。 项目地址: [品茗IT-同步发布][IT-] [品茗IT][IT] 提供在线支持: [一键快速构建Spring项目工具][Spring] [一键快速构建SpringBoot项目工具][SpringBoot] [一键快速构建SpringCloud项目工具][SpringCloud] [一站式Springboot项目生成][Springboot] [Mysql一键生成Mybatis注解Mapper][Mysql_Mybatis_Mapper] **如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以[加入我们的java学习圈,点击即可加入][java],共同学习,节约学习时间,减少很多在学习中遇到的难题。** ## 二、Maven依赖 ## <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.pomit</groupId> <artifactId>SpringWork</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>Quartz</artifactId> <packaging>jar</packaging> <name>Quartz</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> </dependencies> </project> 父模块可以在[https://www.pomit.cn/spring/SpringWork/pom.xml][https_www.pomit.cn_spring_SpringWork_pom.xml]中获取。 quartz主要用到spring-tx、spring-context-support和quartz。 ## 三、环境配置 ## 本文假设你已经引入Spring必备的一切了,已经是个Spring项目了,如果不会搭建,可以打开这篇文章看一看[《Spring和Spring Mvc 5整合详解》][Spring_Spring Mvc 5]。 为方便使用,我们一般把定时任务的crontab表达式提出去。 所以,我们可以配置一个Spring的配置文件spring-quartz.xml,然后在Spring的主配置文件中,用`<import resource="classpath*:spring-quartz.xml"/>`引入即可,这样模块的耦合性就没那么强。 spring-quartz.xml: <?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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:annotation-config /> <context:component-scan base-package="cn.pomit.springwork"> </context:component-scan> <bean id="annotationPropertyConfigurerSchedule" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="order" value="1" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> <property name="locations"> <list> <value>classpath:quartz.properties</value> </list> </property> </bean> <bean id="jobDetailTest" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="scheduleService" /> </property> <property name="targetMethod"> <value>doJob</value> </property> </bean> <bean id="cronTriggerTest" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobDetailTest" /> </property> <property name="cronExpression"> <value>${schedule.task.test}</value> </property> </bean> <!-- 总配置 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 添加触发器 --> <property name="triggers"> <list> <ref bean="cronTriggerTest" /> </list> </property> </bean> </beans> 这里,配置了三个和quartz相关的bean,quartz配置这点很烦人,一个定时任务,要配置一个jobDetail、一个Trigger,然后把Trigger加入到SchedulerFactoryBean中,所以这里如果要再添加一个定时任务,就需要再写一个jobDetail和一个Trigger。 jobDetail:指明了定时任务的业务逻辑怎么调用。 Trigger:决定定时任务怎么触发,要么是CronTrigger,或者是其他,很多的,这里不一一说明了,CronTrigger已经可以解决一切问题了。 SchedulerFactoryBean: 汇总所有Trigger,管理调度。 quartz.properties: schedule.task.test=0/2 * * * * ? ## 四、业务逻辑 ## ScheduleService: package cn.pomit.springwork.quartz.service; import org.springframework.stereotype.Service; @Service public class ScheduleService { public void doJob() { System.out.println("test"); } } ### 快速构建项目 ### [Spring组件化构建][Spring] [SpringBoot组件化构建][SpringBoot] [SpringCloud服务化构建][SpringCloud] 喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot技术吧! ![品茗IT交流群][IT 1] [Spring quartz]: https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#scheduling-quartz [Spring_Schedule_]: https://www.pomit.cn/p/189493386887424 [IT-]: https://www.pomit.cn/p/191370751799552 [IT]: https://www.pomit.cn [Spring]: https://www.pomit.cn/java/spring/spring.html [SpringBoot]: https://www.pomit.cn/java/spring/springboot.html [SpringCloud]: https://www.pomit.cn/java/spring/springcloud.html [Springboot]: https://www.pomit.cn/java/java/sqlToSpringboot.html [Mysql_Mybatis_Mapper]: https://www.pomit.cn/java/java/sqlToMybatis.html [java]: https://jq.qq.com/?_wv=1027&k=52sgH1J [https_www.pomit.cn_spring_SpringWork_pom.xml]: https://www.pomit.cn/spring/SpringWork/pom.xml [Spring_Spring Mvc 5]: https://www.pomit.cn/p/181499739820288 [IT 1]: /images/20211221/0ce07890ab7546f2ac16f724bd7e11f5.png
还没有评论,来说两句吧...