第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); } } } }

相关新闻

第6章:移动端开发:01-移动开发体检预约

第6章:移动端开发:01-移动开发体检预约

第6章 移动端开发-体检预约1. 移动端开发1.1 移动端开发方式随着移动互联网的兴起和手机的普及,目前移动端应用变得愈发重要,成为了各个商家的必争之地。例如,我们可以使用手机购物、支付、打车、玩游戏、订酒店、购票等,以前只能…

2026/8/13 20:57:20 阅读更多 →
Twitch CLI mock-api功能详解:本地开发环境搭建指南

Twitch CLI mock-api功能详解:本地开发环境搭建指南

Twitch CLI mock-api功能详解:本地开发环境搭建指南 【免费下载链接】twitch-cli The official Twitch CLI to make developing on Twitch easier. 项目地址: https://gitcode.com/gh_mirrors/tw/twitch-cli Twitch CLI的mock-api功能是官方提供的强大工具&a…

2026/8/13 20:57:20 阅读更多 →
自己人网站建设怎么选:从源码解析到落地交付的避坑指南

自己人网站建设怎么选:从源码解析到落地交付的避坑指南

在当前的互联网环境下,很多企业主或者创业者在提到“自己人网站建设”时,脸上往往挂着一种既期待又忧虑的神情。期待的是能拥有一个完全属于自己的数字资产,忧虑的是怕被外包公司套路,怕代码里藏着后门,怕交付后就成了“断子绝孙”式的项目,换个名字都找不回原来的服务商…

2026/8/13 20:56:20 阅读更多 →

最新新闻

JavaScript保留两位小数:toFixed、Math函数与高精度库实战指南

JavaScript保留两位小数:toFixed、Math函数与高精度库实战指南

1. 项目概述:为什么“保留两位小数”是个技术活? 刚入行那会儿,我也觉得处理数字显示,特别是保留两位小数,不就是调个函数的事儿吗? toFixed(2) 一用,页面上的价格、金额、百分比立马整整齐齐…

2026/8/13 22:03:59 阅读更多 →
国赛Word模板核心功能解析与高效写作流程指南

国赛Word模板核心功能解析与高效写作流程指南

1. 先搞清楚国赛Word模板到底解决什么问题 每年国赛,很多队伍在模型和代码上下了大功夫,最后却因为论文格式不规范、排版混乱、图表编号错误、公式格式不对而丢分,非常可惜。一个标准的Word写作模板,核心价值不是让你“写”得更好…

2026/8/13 22:03:59 阅读更多 →
HttpAsyncClient长连接Connection reset问题排查与优化

HttpAsyncClient长连接Connection reset问题排查与优化

1. 问题现象与背景分析 最近在项目中遇到一个棘手的问题:使用HttpAsyncClient与服务端建立长连接时,频繁出现"Connection reset by peer"错误。这个问题在高峰期尤其明显,导致部分请求失败,影响了系统稳定性。 HttpAsy…

2026/8/13 22:03:59 阅读更多 →
AI能否成为爱因斯坦?从预测模型到科学发现引擎的工程化探索

AI能否成为爱因斯坦?从预测模型到科学发现引擎的工程化探索

最近看到一个问题,挺有意思:如果把1905年之前人类所有的知识都交给一个AI,它能像当年的爱因斯坦一样,推导出相对论吗? 这个问题乍一听,像是一个关于AI能力的科幻猜想。但仔细一想,它其实戳中了…

2026/8/13 22:03:59 阅读更多 →
5个理由让你立刻爱上DyberPet:打造专属桌面伙伴的终极指南

5个理由让你立刻爱上DyberPet:打造专属桌面伙伴的终极指南

5个理由让你立刻爱上DyberPet:打造专属桌面伙伴的终极指南 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾经幻想过拥有一个真正的桌面伙伴?一个会…

2026/8/13 22:03:59 阅读更多 →
30分钟搭建智能微信机器人:实现多平台AI助手与群聊管理

30分钟搭建智能微信机器人:实现多平台AI助手与群聊管理

30分钟搭建智能微信机器人:实现多平台AI助手与群聊管理 【免费下载链接】wechat-bot 🤖 Multi-platform IM AI Agent for Telegram, WhatsApp, Lark, and WeChat. Connects ChatGPT / Claude / Kimi / DeepSeek / Ollama / Pi for auto-replies, communi…

2026/8/13 22:02:59 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →