# Quartz 简介:https://blog.csdn.net/ThinkWon/article/details/109936696 Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数以十计,百计,万计的工作。任务标准Java组件的任务,都可以执行您对其执行的任何编程操作。Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。 Quartz是免费使用的,并根据Apache 2.0许可获得许可。 ## 所面临的问题 问题:需要一个倒计时器,每次在点完button之后给对应的人发送邮件以及分别在第6周和第10周的时候发送提醒邮件。 思路: * 目前项目中存在的方法都是创建一个quartz Job,然后每隔固定时间没check一次,看看是否有满足要求的任务需要被触发(10s/次)。但是这样会对服务器的压力很大。 **所以针对上面的问题,如果改用其他方式(不用quartz),会对项目的改动很大,不值得,所以思路是如何在现有框架下减少对服务器的压力。** 那么根据目前的需求,发送提醒邮件的时间单位为周,所以不需要精确到小时,分钟,或者秒(比如下单后30分钟内未支付取消订单),所以我们可以设置任何触发为每天一次,且把任务放在每天的凌晨去做,这样用服务器的人就会少很多,也不会在白天的时候和抢占服务器的资源。 ## Cron表达式 推荐阅读:https://blog.csdn.net/sunnyzyq/article/details/98597252 Cron expressions can be as simple as * * * * ? * or as complex as 0 0/5 14,18,3-39,52 ? JAN,MAR,SEP MON-FRI 2002-2010. 这个字符串被5个空格分成了6个部分,假设我们以ABCDEF举例,它的标准格式为:"A B C D E F" 。 A表示秒,B表示分,C表示小时,D表示日,E表示月,F表示星期 故:"A B C D E F" --> "秒 分 时 日 月 星期" ## 触发器是如何被触发的(TODO:需要总结) https://blog.csdn.net/GAMEloft9/article/details/89309040 ## Test Project 如果想练习,可以用这个project作为练习项目 https://cloud.tencent.com/developer/article/1350235 ## 扩展:java中执行定时任务的6种姿势 https://juejin.cn/post/6844904002606350343 心得:不管用哪种方法,对服务器的压力都还是有的,所以需要具体问题具体分析。