开发者

定时任务@Scheduled用法及其参数使用

开发者 https://www.devze.com 2024-08-10 13:46 出处:网络 作者: Mr朱墨
目录定时任务@Scheduled用法及参数Spring框架中@Scheduled注解失效问题问题描述尝试的方式最终查到的解决方式总结定时任务@Scheduled用法及参数
目录
  • 定时任务@Scheduled用法及参数
  • Spring框架中@Scheduled注解失效问题
    • 问题描述
    • 尝试的方式
    • 最终查到的解决方式
  • 总结

    定时任务@Scheduled用法及参数

    @Scheduled是Spring框架中的一个注解,用于标记一个方法为定时任务。android

    当使用@Scheduled注解时,Spring会自动编程客栈创建一个定时任务的执行器(Scheduler),并在指定的时间间隔内执行被标记的方法。

    使用@Scheduled注解时,可以通过设置不同的属性来定义定时任务的行为,例如:

    • fixedRate:固定频率执行任务,表示每隔指定的时间间隔执行一次任务。
    • fixedDelay:固定延迟执行任务,表示在上一次任务执行完成后,等待指定的时间间隔再执行下一次任务。
    • initialDelay:初始延迟时间,表示在第一次执行任务之前的等待时间。
    • cron:使用Cron表达式定义任务的执行时间,可以更灵活地控制任务的执行时间。

    具体实现:

    /**
     * 定时任务001:@Scheduled
     * springboot自带的简易定时任务实现
     *
     * @author zhupeng
     * @Date 2022/1/7 9:53 AM
     */
    @Component
    public class ScheduleTask {
        private String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    
        // 任务间隔3s执行依次【不包括任务执行时间】,延迟1s后执行
        @Scheduled(initialDelay = 1000, fixedDelay = 3000)
        public void fixedDelay() {
            System.out.println("fixedDelay:" + this.date);
        }
    
        // 每隔间隔3s执行依次【包括任务执行时间】
        @Scheduled(fixedRate = 3000)
        public void fixedRate() {
            System.out.println("fixedRate:" + this.date);
        }
        
        // cron表达式,Quartz更详细
        @Scheduled(cron = "*/5 * * * * *")
        public void cron() {
            System.out.println("cron:" + this.date);
        }
    }
    

    Spring框架中@Scheduled注解失效问题

    问题描述

    在Spring框架的Web项目中,有一个业务功能需要每天执行一次,使用了@Scheduled注解执行定时任务,但android是出现了定时任务不执行的情况

    尝试的方式

    类上加@EnableScheduling注解、加实现SchedulingConfigurer接口的配置类、修改cron表达式

    都失败了

    最终查到的解决方式

    在Spring的配置文件中,添加配置:

    • 1.加命名空间

    XMLns添加:

    xmlns:task="http://phpwww.springframework.org/schema/task"

    xsi:schemaLocation添加 :

    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd"
    • 2.启动注解驱动
    <task:annotation-driven scheduler="dataScheduler"/>
    • 3.开启任务调度器,并配置线程池大小
    <task:scheduler id="dataScheduler" pool-size="5"/>
    • 4.然后就可以使用@Scheduled注解了

    总结

    以上为个人经验,希望能给大家一个参考,也希望android大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号