尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第4章:检查套餐管理-03-定时设置套餐
4. 定时任务组件Quartz4.1 Quartz介绍Quartz是Job scheduling作业调度领域的一个开源项目Quartz既可以单独使用也可以跟spring框架整合使用在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务每个定时任务可以单独指定执行的时间例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后一天下午5点执行一次等。官网http://www.quartz-scheduler.org/maven坐标!--spring boot集成quartz-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-quartz/artifactId /dependency4.2 Quartz入门案例本案例基于Quartz和spring整合的方式使用。具体步骤创建SpringBoot工程quartzdemo不依赖父工程1导入Quartz和springBoot相关坐标pom.xml文件如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.liusp/groupId artifactIdquartzdemo/artifactId version0.0.1-SNAPSHOT/version packagingwar/packaging namequartzdemo/name descriptionDemo project for Spring Boot/description properties java.version1.8/java.version project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding spring-boot.version2.3.7.RELEASE/spring-boot.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId scopeprovided/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope exclusions exclusion groupIdorg.junit.vintage/groupId artifactIdjunit-vintage-engine/artifactId /exclusion /exclusions /dependency !--spring boot集成quartz-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-quartz/artifactId /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source1.8/source target1.8/target encodingUTF-8/encoding /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version2.3.7.RELEASE/version configuration mainClasscom.liusp.QuartzdemoApplication/mainClass /configuration executions execution idrepackage/id goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build /project2自定义一个Job下的Jobemo.javajob.JobDemopackage com.liusp.job; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * 自定义Job */ Component public class JobDemo { Scheduled(cron 0/10 * * * * ?) public void run(){ System.out.println(job execute...); } }3SpringBoot 启动类添加注解EnableScheduling //开启基于注解的定时任务4启动服务观察控制台定时任务的执行job execute…job execute…执行上面main方法观察控制台可以发现每隔10秒会输出一次说明每隔10秒自定义Job被调用一次。4.3 cron表达式上面的入门案例中我们指定了一个表达式0/10 * * * * ?这种表达式称为cron表达式通过cron表达式可以灵活的定义出符合要求的程序执行的时间。本小节我们就来学习一下cron表达式的使用方法。如下图cron表达式分为七个域之间使用空格分隔。其中最后一个域年可以为空。每个域都有自己允许的值和一些特殊字符构成。使用这些特殊字符可以使我们定义的表达式更加灵活。下面是对这些特殊字符的介绍逗号,指定一个值列表例如使用在月域上1,4,5,7表示1月、4月、5月和7月横杠-指定一个范围例如在时域上3-6表示3点到6点即3点、4点、5点、6点星号*表示这个域上包含所有合法的值。例如在月份域上使用星号意味着每个月都会触发斜线/表示递增例如使用在秒域上0/15表示每15秒问号?只能用在日和周域上但是不能在这两个域上同时使用。表示不指定井号#只能使用在周域上用于指定月份中的第几周的哪一天例如6#3意思是某月的第三个周五 (6星期五3意味着月份中的第三周)L某域上允许的最后一个值。只能使用在日和周域上。当用在日域上表示的是在月域上指定的月份的最后一天。用于周域上时表示周的最后一天就是星期六WW 字符代表着工作日 (星期一到星期五)只能用在日域上它用来指定离指定日的最近的一个工作日C允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果如果没有“日历”关联则等价于所有包含的“日历”。如日期域是“5C”表示关联“日历”中第一天或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天或者星期的第一天的后1天也就是周日的后一天周一。4.4 cron表达式在线生成器前面介绍了cron表达式但是自己编写表达式还是有一些困难的我们可以借助一些cron表达式在线生成器来根据我们的需求生成表达式即可。http://cron.qqe2.com/5. 定时清理垃圾图片前面我们已经完成了体检套餐的管理在新增套餐时套餐的基本信息和图片是分两次提交到后台进行操作的。也就是用户首先将图片上传到七牛云服务器然后再提交新增窗口中录入的其他信息。如果用户只是上传了图片而没有提交录入的其他信息此时的图片就变为了垃圾图片因为在数据库中并没有记录它的存在。此时我们要如何处理这些垃圾图片呢解决方案就是通过定时任务组件定时清理这些垃圾图片。为了能够区分出来哪些图片是垃圾图片我们在文件上传成功后将图片保存到了一个redis集合中当套餐数据插入到数据库后我们又将图片名称保存到了另一个redis集合中通过计算这两个集合的差值就可以获得所有垃圾图片的名称。本章节我们就会基于Quartz定时任务通过计算redis两个集合的差值找出所有的垃圾图片就可以将垃圾图片清理掉。操作步骤1创建springBoot工程health_jobs打包方式为war导入Quartz等相关坐标pom.xml依赖包?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.liusp/groupId artifactIdhealth_jobs/artifactId version0.0.1-SNAPSHOT/version packagingwar/packaging namehealth_jobs/name descriptionDemo project for Spring Boot/description properties java.version1.8/java.version project.build.sourceEncodingUTF-8/project.build.sourceEncoding project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding spring-boot.version2.3.7.RELEASE/spring-boot.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId scopeprovided/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope exclusions exclusion groupIdorg.junit.vintage/groupId artifactIdjunit-vintage-engine/artifactId /exclusion /exclusions /dependency dependency groupIdcom.liusp/groupId artifactIdhealth_interface/artifactId version0.0.1-SNAPSHOT/version /dependency !-- 引入redis-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency !--spring boot集成quartz-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-quartz/artifactId /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source1.8/source target1.8/target encodingUTF-8/encoding /configuration /plugin plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version2.3.7.RELEASE/version configuration mainClasscom.liusp.HealthJobsApplication/mainClass /configuration executions execution idrepackage/id goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build /project2SpringBoot启动类添加注解EnableScheduling //开启基于注解的定时任务3配置application.ymlserver: port: 88 #redis配置 spring: redis: host: 127.0.0.14自定义Job实现定时清理垃圾图片job.ClearImgJobpackage com.liusp.job; import com.liusp.constant.RedisConstant; import com.liusp.utils.QiniuUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Set; /** * 自定义Job实现定时清理垃圾图片 */ Component public class ClearImgJob { Autowired StringRedisTemplate redisTemplate; //操作k-v都是字符串的 Scheduled(cron 0/10 * * * * ?) public void clearImg(){ //根据Redis中保存的两个set集合进行差值计算获得垃圾图片名称集合 //sdiff方法是计算两个集合的差值 SetString set redisTemplate.opsForSet().difference(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES); if(set ! null){ for (String picName : set) { //删除七牛云服务器上的图片 QiniuUtils.deleteFileFromQiniu(picName); //从Redis集合中删除图片名称 redisTemplate.opsForSet(). remove(RedisConstant.SETMEAL_PIC_RESOURCES,picName); System.out.println(自定义任务执行清理垃圾图片picName); } } } }
RELATED

相关推荐

关于STM32(或GD32)ADC的理解及使用

关于STM32(或GD32)ADC的理解及使用

强烈推荐野火的资料:零角度玩转STM32-F103指南。相关ADC的部分,看得出来他们很用心去写的。下面主要以野火的资料和代码进行整理。 STM32的最大转换速率为1Mhz,也就是转换时间是1us,不要让ADC的时钟超过14M(查看时钟树…

📅 2026/10/8 17:56:18
为什么选择Giffy Dialog?Flutter动画对话框的性能与设计优势

为什么选择Giffy Dialog?Flutter动画对话框的性能与设计优势

为什么选择Giffy Dialog?Flutter动画对话框的性能与设计优势 【免费下载链接】giffy_dialog A Flutter package for a quick and handy giffy dialog. 项目地址: https://gitcode.com/gh_mirrors/gi/giffy_dialog Giffy Dialog是一款专为Flutter开发者打造的…

📅 2026/10/7 3:26:39
深度解析:Garage-WebUI的对象存储原理与架构设计

深度解析:Garage-WebUI的对象存储原理与架构设计

深度解析:Garage-WebUI的对象存储原理与架构设计 【免费下载链接】garage-webui WebUI for Garage Object Storage Service 项目地址: https://gitcode.com/gh_mirrors/ga/garage-webui Garage-WebUI是一款专为Garage对象存储服务打造的Web管理界面&#xff…

📅 2026/10/5 19:11:37
MORE NEWS

更多资讯

📰

MySQL 8.0 免安装版:可复现、可审计的解压即用数据库运行时

简介:本资源是MySQL 8.0的绿色免安装版,面向数据库初学者、开发测试人员及需快速搭建本地环境的工程师,解决传统安装流程繁琐、配置复杂、易与系统已有服务冲突等问题。压缩包为ZIP格式,共420个文件,涵盖98个DLL&#…

📰

Web开发中数据库到页面的数据流转与优化实践

1. 数据库到页面的数据流转基础数据库数据显示到页面是现代Web开发中最基础也最核心的流程。这个看似简单的操作背后,其实涉及前后端完整的技术栈协作。以典型的MySQL数据库为例,当用户访问一个新闻列表页面时,数据实际上经历了这样的旅程&am…

📰

银发经济崛起:退休人群社交与消费市场分析

1. 项目背景与市场机遇最近两年,一个特殊的商业现象正在悄然兴起:大量初创企业通过服务退休人群实现了快速增长。其中最典型的案例之一,就是某家专注退休人群社交与消费的"退休俱乐部",在短短两年内吸引了超过10万会员&…

📰

从输出物倒推设计软件选型:八款工具工作流与文件交接

做设计这些年,被问得最多的问题从来不是“这个渐变怎么调”,而是“我到底该装哪几个软件”。尤其是刚入行或者从别的岗位转过来的朋友,打开搜索引擎一看,满屏都是“设计师常用的8款作图软件推荐”,点进去十篇有八篇是同…

📰

Linux时间函数选型与踩坑:从时钟语义到格式转换

项目上线第三周,监控面板上突然冒出一批日志时间戳倒退的记录:同一条业务链路,后写的日志时间反而比先写的早了 700 多毫秒。第一反应是日志组件出了问题,翻代码翻了半天,最后发现是两处代码分别用了gettimeofday()和c…

📰

VSCode中Vue i18n提效工具配置与实战

1. 为什么需要VSCode中的Vue i18n提效工具在Vue项目开发中,国际化(i18n)是让应用支持多语言的关键功能。传统i18n工作流程存在几个痛点:开发人员需要频繁在代码和语言文件之间切换;难以实时预览翻译效果;新增语言键值时需要手动同…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬