当前位置: 首页 > article >正文

SpringBoot使用@Scheduled注解实现定时任务

spring Task 支持 Cron 表达式,还有 fixedRate(固定速率执行)、fixedDelay(固定延迟执行)、initialDelay(初始延迟)三种用法。

第一步 在启动类使用@EnableScheduling 注解开启定时任务也可以写个配置类开启


/**
配置类开启
*/
@Configuration
@EnableScheduling
public class SpringTaskConfig {
}

/**
启动类开启
*/
@SpringBootApplication
@EnableScheduling
public class CodingmoreSpringtaskApplication {

	public static void main(String[] args) {
		SpringApplication.run(CodingmoreSpringtaskApplication.class, args);
	}

}

第二步,新建定时任务类 CronTask,使用 @Scheduled 注解注册 Cron 表达式执行定时任务。

1.固定延迟

@Component
public class ScheduleTask1 {
    //每3秒执行一次
    @Scheduled(fixedDelay = 3000)
    private void myTasks() {
        System.out.println("I do myself per third seconds");
    }
}

2.初始延迟+固定延迟

@Component
public class ScheduleTask2 {
    //容器启动后,延迟10秒后再执行一次定时器,以后每10秒再执行一次该定时器。
    @Scheduled(initialDelay = 10000, fixedRate = 10000)
    private void myTasks3() {
        System.out.println("我是一个定时任务3");
    }
}

3.Cron 表达式


@Component
public class ScheduleTask3 {

    @Scheduled(cron ="*/1 * * * * ?")
    public void sayWord() {
        System.out.println("world");
    }

默认情况下,@Scheduled 创建的线程池大小为 1,如果想增加线程池大小的话,可以让 SpringTaskConfig 类实现 SchedulingConfigurer 接口,通过 setPoolSize 增加线程池大小。

@Configuration
@EnableScheduling
public class SpringTaskConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

        threadPoolTaskScheduler.setPoolSize(10);
        threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
        threadPoolTaskScheduler.initialize();

        taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }
}

http://www.kler.cn/a/313519.html

相关文章:

  • Electron 项目启动外部可执行文件的几种方式
  • 94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13
  • Springboot 启动端口占用如何解决
  • 除了 Postman,还有什么好用的 API 调试工具吗
  • Matlab: 生成对抗网络,使用Datastore结构输入mat格式数据
  • 闯关leetcode——3174. Clear Digits
  • MavenMyBatis
  • 0基础跟德姆(dom)一起学AI 数据处理和统计分析04-Panda入门
  • 【操作系统】01.冯·诺伊曼体系结构
  • Flask-WTF的使用
  • 【C++】透析string类
  • 力扣300-最长递增子序列(Java详细题解)
  • 软考无损连接判断
  • Apache Airflow如何使用
  • Python编码系列—Python策略模式:灵活应对变化的算法策略
  • Java 在 GIS 领域的学习路线?
  • 硬件工程师笔试面试——开关
  • 数据飞轮崛起:数据中台真的过时了吗?
  • 基于python+django+vue的旅游网站系统
  • 【script】java武魂技展示:在java中使用不同的脚本语言 一文体现java生态的强大
  • -bash: apt-get: command not found -bash: yum: command not found
  • 算法-深度拷贝链表(138)
  • 毕业设计选题:基于ssm+vue+uniapp的校园商铺系统小程序
  • 【PCL实现点云分割】ROS深度相机实践指南(上):PCL库初识和ROS-PCL数据类型转换
  • 解决Mac下Vscode编译运行C语言程序会自动生成DSYM文件夹的问题
  • Vue使用代理方式解决跨域问题