springboot集成scheduled

JAVA && Spring && SpringBoot2.x — 学习目录

1. ScheduledThreadPoolExecutor线程池
2. SpringBoot2.X整合定时线程池(ScheduledThreadPoolExecutor)

1. SpringBoot对ScheduledThreadPoolExecutor线程池的自动装配

源码:org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration

public class TaskSchedulingAutoConfiguration {

    @Bean
    @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
    @ConditionalOnMissingBean({ SchedulingConfigurer.class, TaskScheduler.class, ScheduledExecutorService.class })
    public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
        return builder.build();
    }

    @Bean
    @ConditionalOnMissingBean
    public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
            ObjectProvider<TaskSchedulerCustomizer> taskSchedulerCustomizers) {
        TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
        builder = builder.poolSize(properties.getPool().getSize());
        builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
        builder = builder.customizers(taskSchedulerCustomizers);
        return builder;
    }

}

代码配置线程池

    // 创建线程
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
        executor.setPoolSize(20);
        executor.setThreadNamePrefix("taskExecutor-");
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setAwaitTerminationSeconds(60);
        return executor;
    }

我们可以配置线程数量,和线程池前缀信息。

# 线程池大小 
spring.task.scheduling.pool.size=10 
# 线程名前缀 
spring.task.scheduling.thread-name-prefix=task-pool-

2. 整合步骤

  1. 在启动类上加入@EnableScheduling注解。
  2. 在任务方法上加入 @Scheduled注解。

需要主要的是,SpringBoot默认一个工作线程,任务之间可能会互相影响,出现misfire(错过执行)的情况,我们可以根据实际情况调整线程池的大小。

使用方法:

    @Scheduled(fixedRate = 2000)
    public void printLog(){
        log.info("定时打印");
    }

项目启动后,会定时执行该方法。

3. @Scheduled注解的属性

源码:org.springframework.scheduling.annotation.Scheduled

属性作用
croncron表达式,按照指定的规则执行
fixedDelay上一次任务执行完成后多久再次执行,单位ms,类型long
fixedDelayString同fixedDelay,只不过单位是String
fixedRate按照一定频率执行任务,若错过本来触发时间,则任务会立即触发
fixedRateString同fixedRate,单位String类型
initialDelay表示延迟多久后第一次执行任务,参数类型为long,单位ms
initialDelayString同initialDelay,单位String类型
zone时区,默认为当前时区,一般没有用到


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值