SpringBoot 定时任务

SpringBoot:定时任务

定时任务@Scheduler

Spring支持使用注解@Scheduler标记定时任务。
@Scheduler可以传入六个参数,分为下面四种:

  1. fixedDelay: 每次方法执行完毕后,等待Nms再执行此方法。(fixedDelayString与他一样,只是参数是字符串,重点支持占位符,如${})
    eg:@Scheduled(fixedDelay=1000)
  2. fixedRate: 每隔5s调用一次此方法,无论之前的方法是否执行完毕.(fixedRateString这个与他一样,参数为String,重点支持占位符,如${})
    eg: @Scheduled(fixedRate=5000)
  3. initialDelay: 第一次调用此方法前的等待时间
    eg:@Scheduled(initialDelay=1000, fixedRate=5000),同样,存在(initialDelayString,支持占位符)
  4. 最后是cron表达式,支持占位符,参数为String
    eg: @Scheduled(cron=" */5 * * * * ? ")//五秒一次

里面参数分别代表:second, minute, hour, day of month, month, day of week

用的较多的主要是corn表达式,如果不会,随便百度cron表达式验证,就有那种在线网站可以UI到表达式双向解析。当然也可以学习一下他的写法,这里就不细讲了。

线程池配置

可以使用默认的线程池,当然这里要说一下自定义线程池
TaskScheduler是spring的定时任务使用的线程池的关键类。其类继承关系可以看一下我上一篇文章。https://blog.csdn.net/weixin_39789689/article/details/98469341

/**
 * 通过实现SchedulingConfigurer对定时任务线程池进行更细致配置
 * @author hby
 *
 */
@Component
@Configuration
public class MySchedulingConfigurer implements SchedulingConfigurer  {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskScheduler.setPoolSize(10);//参数可以配到配置文件
		taskScheduler.initialize();
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(destroyMethod="shutdown")
    public Executor taskExecutor() {
    	//不想重写就直接用默认的也不是不行;
    	//return Executors.newScheduledThreadPool(100);
        return  new ScheduledThreadPoolExecutor(10, new ThreadFactory() {
            private AtomicInteger max = new AtomicInteger(0);
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "myScheConfig-" + max.incrementAndGet());
            }
        });
    }
}

同时定时任务可以动态修改;
SchedulingConfigurer 动态修改定时规则,网上有两种方法,都有缺点。

  1. 一种如下:

https://blog.csdn.net/xht555/article/details/53121962

此方法,是在触发运行的时候,刷新定时规则,这种方法的缺点是,刷新规则的时间必须是在某次触发运行的时候。

  1. 另一种是

https://blog.csdn.net/jianggujin/article/details/77937316

此方法基于 SchedulingConfigurer 的源码,捕获 ScheduledTaskRegistrar 类的实例,通过该类中的 TaskScheduler 实例操作定时任务的增删,而非采用 ScheduledTaskRegistrar.addTriggerTask 方法维护定时任务。所以需要自行写代码维护定时任务列表,可以通过数据库配置,来控制任务是否加载,删减。

3.重量级一点的话,其实还是建议使用第三方开源组件 Quartz。

SpringBoot启动定时任务

 @EnableScheduling // 启动定时任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值