定时任务,@Scheduled的使用

        Spring框架的@Scheduled注解是一种用于简化定时任务实现的机制。使用@Scheduled注解,可以很容易地在Spring管理的Bean中创建一个简单的定时任务,而无需深入了解底层的定时任务实现细节。

        代码示例如下:任务每隔秒执行一次

@Component
public class job {
    static int num=1;
    @Scheduled(fixedRate = 1000L)
    public void scheduleTime(){
        System.out.println("每隔1秒执行一次,现在是第"+num+"次");
        num+=1;
    }
}

        @Scheduled源码以及各熟悉的解释如下:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
@Reflective
public @interface Scheduled {
    
    //CRON_DISABLED: 一个常量,表示cron表达式被禁用。如果cron属性设置为这个值,那么基于cron表达式的调度将不会被使用。
    String CRON_DISABLED = "-";
    
    //cron(): 定义一个cron表达式,用于复杂的时间设置。cron表达式是一种字符串,用于表达时间和日期的重复模式。
    String cron() default "";

    //zone(): 定义任务执行的时区。如果不设置,默认使用服务器的默认时区。
    String zone() default "";
    
    //fixedDelay(): 指定在任务成功执行完毕后,等待多长时间再执行下一次。如果设置为-1L,则不使用这个属性。
    long fixedDelay() default -1L;

    //fixedDelayString(): 与fixedDelay()相同,但允许你以字符串形式提供值,可以更容易地在配置文件中设置。
    String fixedDelayString() default "";

    //fixedRate(): 指定任务应该多久执行一次。如果设置为-1L,则不使用这个属性。
    long fixedRate() default -1L;

    //fixedRateString(): 与fixedRate()相同,但允许以字符串形式提供值。
    String fixedRateString() default "";

    //initialDelay(): 指定任务开始执行前的延迟时间(以毫秒为单位)。如果设置为-1L,则立即执行。
    long initialDelay() default -1L;

    //initialDelayString(): 与initialDelay()相同,但允许以字符串形式提供值。
    String initialDelayString() default "";

    //timeUnit(): 定义fixedDelay()和fixedRate()属性的时间单位,默认是毫秒
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    //scheduler(): 指定用于任务的调度器Bean的名称。如果留空,Spring将使用默认的调度器。
    String scheduler() default "";
}

        常用的属性有:cron(设置固定时间执行),fixedRate(每隔多久执行一次)。

        在业务中cron的使用场景较多,比如每日签到(即每天凌晨刷新一次状态),

cron表达式的格式是固定的,包含七个可选字段,分别表示:

  1. 分钟
  2. 小时
  3. 日期
  4. 月份
  5. 星期中的日期(1-7),1代表星期天
  6. 年份(可选字段,因为大多数实现不支持)

简单代码示例如下:

    /**
     * 0 第一个字段表示秒,这里设置为0,意味着在每分钟的第0秒触发。
     * 0 第二个字段表示分钟,这里设置为0,意味着在每小时的第0分钟触发。
     * 1 第三个字段表示小时,这里设置为0,意味着在凌晨0点触发。
     * * 第四个字段表示月份中的日期,星号(*)表示每天。
     * * 第五个字段表示月份,星号(*)表示每个月。
     * ? 第六个字段表示星期几,问号(?)表示不指定具体星期几。
     */
    @Scheduled(cron = "0 0 0 * * ?")
    public void updateState(){
        //方法体 ******
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值