Spring:结合实训项目,利用Spring Schedule实现定时关闭订单

本文详细介绍了如何使用Spring Schedule实现定时关闭订单功能,涉及到Cron表达式、MySQL的行锁和表锁。在配置和初始化过程中,讲解了Spring Schedule在XML配置文件中的设置,以及在服务层和数据访问层的具体操作。同时,文章指出在集群环境中可能出现的问题,即任务重复执行,建议采用Redis分布式锁来解决。
摘要由CSDN通过智能技术生成

Spring Schedule实现定时关闭订单

一、Spring Schedule&MySQL行锁表锁
1.1 描述

用于作业调度,如定时任务,非常轻量级, 对代码无侵入性,程序员可以注重业务的编写, 不需要关心如果构造Scheduler,但是调度任务被创建出来之后,不能动态更改任务执行周期,对于复杂的任务调度也具有一定的局限性

1.2 Cron表达式快速入门

Cron表达式的格式为:秒 分 时 日 月 周 年(可选)

字段名 允许值 允许特殊符号
0-59 , - * /
0-59 , - * /
小时 0-23 , - * /
月内日期 1-31 , - * / L W C
1-12或者JAN-DEC , - * /
周内日期 1-7或者SUN-SAT , - * / L # C
年(可选) 留空,1970-2099 , - * /
意义
* 匹配所有的值,在分钟的字段域里表示每分钟,类似于Linux的周期性任务
只是在日期域喝星期域中使用,它被用来指定非明确值
- 指定一个范围,在小时域里10-12表示10点、11点、12点
指定几个可选值,如周内日期1,2,3表示星期一、星期二、星期三
/ 指定增量,在秒域中0/15表示每分钟的0、15、30和45秒
L 表示day-of-monthday-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天,如果在day-of-week域表示’7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如’6L’就表示一个月的最后一个星期五
W 只允许日期域出现,这个字符用于指定日期的最近工作日,例如‘15W’表示这个月15号最近的工作日,如果15号是周六,则任务会在14号触发,如果15号刚好是周日,则任务会在周一也就是16号触发
LW L和W可以在日期域中联合使用,LW表示这个月最后一周的工作日
# 只允许在星期域中出现,这个字符用于指定本月的某某天。‘6#3’表示本月第三周的星期五,6表示星期五,3表示第三周,‘2#1’表示本月第一周的星期一
C 允许在日期域和星期域出现。表达式的值依赖于相关的“日历”的计算结果。
1.3 Spring Schedule Cron生成器

[外链图片转存失败(img-t1NmXdCD-1567681483634)(F:\博客截图\cron表达式生成器.PNG)]

1.4 MySQL行锁与表锁
  • 悲观锁
    select … for update

  • ROW-Level Lock(明确的主键)
    select … for update在明确主键的时候会产生行锁

    Case1:
    例如在proinfo表中,有id和name,id是主键
    明确指定主键,并且有结果集,Row-Level Lock,产生行锁
    select * from proinfo where id='441908080' for update
    
    Case2:
    明确指定主键,但是没有结果集,则无所
    select * from proinfo where id='-441908080' for update
    
  • Table-Level Lock(无明确的主键)

    select … for update在明确主键的时候会产生表锁

    Case1:
    无主键,Tbale-Level Lock,产生表锁,会将整个表锁住
    select * from proinfo where name='徐礼诚' for update
    
    Case2:
    主键不明确,Table-Level Lock,产生表锁,会将整个表锁住
    select * from proinfo where id<>'441908080' for update
    select * from proinfo where id like '441908080' for update
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值