Spring Schedule定时关单快速入门(二)

配置定时关闭订单

1.编辑Spring配置文件 添加上内容

2.创建定时关单类

//--------------------------------------------------------------

在v1版本中,我们采用普通的定时器,(这种设计模式下的定时器可以解决普通的单tomcat服务器项目)

代码:

//非集群项目使用该定时器
@Scheduled(cron = "0 */1 * * * ?")//每1分钟(每个1分钟的整数倍)调用一次
public void closeOrderTaskV1(){
    log.info("关闭订单定时任务启动");

    int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2"));
    iOrderService.closeOrder(hour);//关闭2小时以前没支付的订单.

    log.info("关闭订单定时任务结束");

}
private void closeOrder(String lockName){
    RedisShardedPoolUtil.expire(lockName,5);//设置key的有效期为50秒,防止死锁
    log.info("获取{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());//打印日志(1.锁名 2.当前线程的名字)
    int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2"));
    //iOrderService.closeOrder(hour);//关闭2小时以前没支付的订单.
    RedisShardedPoolUtil.del(Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);
    log.info("释放{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());//打印日志(1.锁名 2.当前线程的名字)
    log.info("==================================");

}

//-------------------------------------------------------------

注意:以上方法在普通项目上运行并没问题,但是在Tomcat集群的项目中运行时,我们会发现每到时间所有集群的Tomcat都会执行定时器。

定时器中运行的代码涉及数据库的访问,此时定时器会浪费了Mysql和服务器的性能,且容易造成数据的错乱。

这并不是我们需要的,我们只需要到时间只一台Tomcat执行定时器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kerry_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值