Spring Boot中的计划任务

Spring Boot中的计划任务

在Spring Boot项目中,可以自定义组件类,并在类中自定义方法,然后,在方法上添加@Scheduled注解,则此方法就会是一个计划任务方法,会根据@Scheduled参数的配置周期性的执行。

计划任务通常是可能耗时较长的,所以,默认并不允许执行,需要在配置类上添加@EnableScheduling注解以开启。

例如,创建新的配置类,以启用计划任务:

package cn.tedu.csmall.product.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@EnableScheduling
public class ScheduleConfiguration {
}

然后,编写计划任务类:

package cn.tedu.csmall.product.schedule;

import cn.tedu.csmall.product.service.IBrandService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class CacheSchedule {

    @Autowired
    private IBrandService brandService;

    // 关于@Schedule注解参数
    // fixedRate:计划任务的执行频率,以上一次的起始时间来计算下一次的起始时间,以毫秒为单位
    // fixedDelay:计划任务的执行间隔,以上一次的结束时间来计算下一次的起始时间,以毫秒为单位
    // cron:使用1个字符串作为值,此字符串是一个表达式,由6~7部分组成,各部分使用空格分隔
    // -- 在cron中的配置值,各部分表示的意义,从左至右分别是:秒 分 时 日 月 周 [年]
    // -- 各部分值都可以使用通配符
    // -- 使用星号作为通配符:表示任意值
    // -- 使用问号作为通配符:表示不关心此值,只能用于“日”和“周”
    // -- 例如:"56 34 12 13 4 ? 2023" 表示 >> 2023年4月13日 12:34:56执行此计划任务,无视当天星期几
    @Scheduled(fixedRate = 1 * 60 * 1000)
    public void rebuildCache() {
        log.debug("计划任务开始执行……");
        brandService.rebuildCache();
    }

}

注意:计划任务的首次执行是在项目启动完成之前的那一刻。对于同样的任务,不要同时使用ApplicationRunner和计划任务一起实现。

关于cron表达式的参考:https://www.cnblogs.com/dyppp/p/7498457.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值