SpringBootTask定时任务

SpringBootTask定时任务

2022年10月8日

14:28

一、简单应用(单线程)

  1. 启动类加@EnableScheduling(默认扫描启动类的同路径)
  2. 创建一个类交给spring管理@Component
  3. 该类的方法上@Scheduled(cron = “*/5 * * * * ?”)(每个使用到定时任务的方法)

二、异步调用

  1. 启动类加@EnableScheduling(默认扫描启动类的同路径)
  2. 创建一个类交给spring管理@Component
  3. 该类的方法上@Scheduled(cron = “*/5 * * * * ?”)(每个使用到定时任务的方法)
  4. 该类上加@EnableAsync
  5. 方法上加@Async(每个使用到定时任务的方法)

效果:

  1. 同一方法(同一个任务)时间到达就会执行,不管前面的任务是否执行完(同时执行)。
  2. 不同方法(不同任务),执行时机相同,同时执行。

三、线程池配置

  1. 启动类加@EnableScheduling(默认扫描启动类的同路径)
  2. 创建一个类交给spring管理@Component
  3. 该类的方法上@Scheduled(cron = “*/5 * * * * ?”)(每个使用到定时任务的方法)
  4. 配置线程池(并交给spring管理)
  @Bean

  public ThreadPoolTaskScheduler testExecutor() {ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();// 配置线程池大小

​    threadPoolTaskScheduler.setPoolSize(20);// 设置线程名

​    threadPoolTaskScheduler.setThreadNamePrefix("task-scheduling-");// 设置等待任务在关机时完成//  threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);// 设置等待终止时间// threadPoolTaskScheduler.setAwaitTerminationSeconds(60);return threadPoolTaskScheduler;

  }

效果:

  1. 同一方法(同一个任务)时间到达,须排队等待上一次任务执行完毕,再执行下一次任务。(同一任务同步执行)
  2. 不同方法(不同任务),执行时机相同,同时执行。(不同任务异步执行)

注意:

  1. 如果多个不同任务操控同一资源,由于异步执行,肯定会导致线程问题,核心操作共享变量须加锁。
  2. 任务间隔相同的情况下,为业务解耦,应归为同一定时任务。
  3. 如果任务在某个时刻,同时执行,而又需保证A任务在B任务前执行,可以用redis来控制获取锁的顺序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值