-
应用场景:
- 淘宝下单+未付款:淘宝需要将超过24小时未付款的订单“自动”关闭
定时器可以每隔2小时查询此种情况所有订单,关闭
- 淘宝收货+不点“确认收货”:7天”自动“确认收货。
不可能是人一个个去点,所以还是定时器
- 淘宝订单已完成+不评价:”自动“好评
2.配置方式:
- Spring3.0之前,定时任务配置方式:https://blog.csdn.net/hll174/article/details/50475007
- Spring配置定时任务task
- applicationContext.xml添加task定时任务的约束
2.创建定时任务类 com.zq.job.TaskJob.java
3.自动扫描你的定时任务类夹:applicationContext.xml
4.开启定时任务配置
5.定时任务类,添加代码
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。按顺序依次为:
秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
7.年份(1970-2099)
“*”字符代表所有可能的值:因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天
“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
“/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写 但是它在两个子表达式里的含义是不同的。 在天(月)子表达式中,“L”表示一个月的最后一天
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT 如果在“L”前有具体的内容,它就具有其他的含义了 例如:“6L”表示这个月的倒数第6天,
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
写个定时任务
- 使用场景:商城用户有级别,满足条件后第二天自动升级
级别 | 会员级别名称 | 条件 | 优惠 |
1 | 普通会员 | 无 | 无 |
2 | 白金会员 | 消费满5000 | 9折 |
3 | 钻石会员 | 消费满20000 | 8折 |
- user表添加字段:级别、消费总金额、账户余额
- User.java添加3个字段:grade、total、account、
- 定时任务逻辑
- sql