SpringBoot启用定时器任务(基于注解,简单易上手)

文章目录

前言

一、定时任务是什么?

二、代码实现

1.相关代码注解

2.注解用法

总结


前言

       几乎在所有的项目中,定时任务的使用都是不可或缺的,例如生活中网上购物的日常,如果用户收到了商品而没有点击已经收货,过了一个星期这个订单就需要自动转变为已收货状态,这种实时性不高的情景就可以用定时器实现。所以,系统的学习一下定时任务,是非常有必要的。这篇文章就带大家整体梳理学习一下Java领域中定时器的实现方式。


一、定时任务是什么?

        定时任务可以看做是一个闹钟,在项目运行之后,根据设定好的定时间隔,可以设置为多长时间处理一次,对设计好的定时业务进行处理

二、代码实现

1.相关代码注解

        要使用@Scheduled注解,首先需要在启动类添加@EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled注解,执行计划任务

             创建一个业务处理类,将该类注入到Spring容器之中(重点),在类中创建需要处理的业务方法,在该方法上面使用@Scheduled注解,该注解可设置定时时间

package com.lyj.web.task;

import com.github.pagehelper.PageInfo;
import com.ruoyi.biz.domain.UserOrder;
import com.ruoyi.biz.dto.OrderDTO;
import com.ruoyi.biz.param.query.OrderQueryParam;
import com.ruoyi.biz.service.IUserOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

@Component
@Slf4j
public class OrderTask {

    @Autowired
    private IUserOrderService orderService;

    /**
     * 定时设置订单自动收货
     */
    @Scheduled(cron = "0 0 */1 * * ?")
    public void autoReceipt(){
        log.info("----订单自动收货定时器----");
        final Date currentDate = new Date();
        //将已经付款,待收货的订单七天自动调整为已收货
        List<UserOrder> userOrderList = orderService.selectAll(OrderQueryParam.builder().status(2).build());
        List<UserOrder> collect = userOrderList.stream().filter(userOrder -> currentDate.getTime() - userOrder.getSendGoodsTime().getTime() > 1000 * 60 * 60 * 24 * 7 ).collect(Collectors.toList());
        collect.stream().forEach(userOrder -> orderService.updateUserOrder(UserOrder.builder().id(userOrder.getId()).status(4).build()));
    }
}

2.注解用法

使用@Scheduled时设置corn的值来设置业务处理的间隔时间

corn六个位置参数分别表示:

  • 秒(0~59) 例如0/5表示每5秒
  • 分(0~59)
  • 时(0~23)
  • 日(0~31)的某天,需计算
  • 月(0~11)
  • 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

常见的corn表达式:


总结

        以上就是基于注解的定时任务实现,对于实时性不高的需求可以用定时任务,对于实时性要求比较高的需求还得用消息队列来完成,可以用RabbitMq或者是kafka来实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杰杰不会helloworld

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

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

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

打赏作者

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

抵扣说明:

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

余额充值