---
# System prepended metadata

title: Quartz

---

# 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
心得：不管用哪种方法，对服务器的压力都还是有的，所以需要具体问题具体分析。

