springboot定时任务

在平常的开发中很多时候我们都有用到定时任务,而springboot也为我们提供了注解式定时任务

1.启动类

@EnableScheduling  //开启定时任务扫描 让springboot找到有定时任务注解的方法
@SpringBootApplication
public class ATestDemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(ATestDemo1Application.class, args);
    }
}

2.定时任务

@Service
public class TestService {
    @Scheduled(fixedRate = 2000)   //2秒执行一次
    public void testScheduler01(){
        System.out.println("testScheduler01----->"+Thread.currentThread().getName());
    }

    @Scheduled(fixedRate = 2000)
    public void testScheduler02(){
        System.out.println("testScheduler02----->"+Thread.currentThread().getName());
    }
}

在这里我们的定时任务就已经准备完成了,启动程序后会按照指定规则执行方法,在这里我们打印两个方法说执行的线程名,会发现是同一个线程,springboot定时任务默认的是单线程执行,在上一个任务没有完成的情况下会阻塞下一个任务。

3.实现多线程定时任务

两种实现方法

3.1创建一个TaskScheduler线程池并交给容器管理

@Configuration
public class ScheduleConfig  {
    @Bean
    public TaskScheduler taskScheduler(){
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        //设置并发为10
        scheduler.setPoolSize(10);
        return scheduler;
    }
}

3.2实现SchedulingConfigurer接口,重写configureTasks方法给它set进一个线程池

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        //设定一个长度10的定时任务线程池
        scheduledTaskRegistrar.setScheduler(new ScheduledThreadPoolExecutor(10));
    }
}

两种方法选取一个即可

4.@Scheduled中的参数说明:

@Scheduled(fixedRate=2000):上一次开始执行时间点后2秒再次执行;
 
@Scheduled(fixedDelay=2000):上一次执行完毕时间点后2秒再次执行;
 
@Scheduled(initialDelay=1000, fixedDelay=2000):第一次延迟1秒执行,然后在上一次执行完毕时间点后2秒再次执行;

@Scheduled(cron="* * * * * ?"):按cron规则执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值