springboot定时任务同步数据,springboot定时任务动态配置

  springboot定时任务同步数据,springboot定时任务动态配置

  在我们实际的项目开发过程中,经常需要预定的任务来帮助我们做一些事情,比如每隔一个小时统计一次新注册用户的数量,每天凌晨1点清理服务器缓存,每周五统计购买会员的用户数量等等。

  如何解决写爬虫IP受阻的问题?立即使用。

  在2.0版本之后,SpringBoot提供了一种非常方便的注释方式来编写调度任务程序,不需要添加任何配置文件和依赖关系。快速构建SpringBoot项目,添加以下注释:

  @SpringBootApplication

  @启用调度

  公共类演示应用程序{

  公共静态void main(String[] args) {

  spring application . run(demo application . class,args);

  }

  }@EnableScheduling:打开对计划任务的支持。

  注解方式-单线程

  创建要存储在任务包中的SchedulerTask1类:

  @组件

  公共课程计划任务1 {

  @Scheduled(cron=*/6 * * * *?)

  私有void进程(){

  系统。out.println(调度程序任务1: local datetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));

  }

  }创建要存储在任务包中的Schedulertask2类:

  @组件

  公共课程计划任务2 {

  @Scheduled(固定速率=3000)

  私有void进程(){

  系统。out.println(调度程序任务2: local datetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));

  }

  }@Scheduled参数可以接受两种定时设置,一种是cron=*/6 * * * *?,一个是fixedRate=3000,两个都表示每x秒打印一次内容。

  fixedRate 说明

  @Scheduled(fixedRate=3000):最后一次执行时间后3秒。

  @Scheduled(fixedDelay=3000):最后一次执行后3秒。

  @ Scheduled(初始延时=1000,固定速率=6000):第一次延时执行1秒,然后按

  固定速率的规则每6秒执行一次。

  Cron表达式参数分别表示:

  秒(0~59),例如0/5表示每隔5秒。

  分数(0~59)

  小时(0~23)

  当天(0~31),需要计算

  月份(0~11)

  周(您可以填写1-7或星期日/星期一/TUE/星期三/THU/星期五/星期六)

  启动项目,执行结果如下:

  日程安排任务2:21:36:47 . 48686868687

  线程:调度-1

  日程安排任务1:21:36:48 . 468686886866

  线程:调度-1

  日程安排任务2:21:36:50 56866 . 48686868686

  线程:调度-1

  日程安排任务2:21:36:53 . 46666868667

  线程:调度-1

  日程安排任务1:21:36:54 54686 . 48686868686

  线程:调度-1

  日程安排任务2:21:36:56 . 366676767687

  线程:调度-1

  日程安排任务2:21:36:59 54666 . 36666666667

  线程:调度-1

  日程安排任务1:21:37:00 . 49867 . 48868686686

  线程:调度-1

  日程安排任务2:21:37:02 . 36687

  线程:调度-1

  日程安排任务2 : 21:37:05.802238

  线程:调度-1

  日程安排任务1:21:37:06 . 20002003637

  Thread: scheduling-1可以看出,当上述两个被调度的任务同时执行时,使用的是同一个thread: scheduling-1,任务的执行机会受到前一个任务执行时间的影响。

  注解方式-多线程

  新的MultithreadScheduleTask类存储在任务包中:

  @组件

  @启用异步

  公共类MultithreadScheduleTask {

  @Async

  @Scheduled(fixedDelay=1000)

  public void first()引发InterruptedException {

  第一个计划任务开始: localdatetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));

  thread . sleep(1000 * 10);

  }

  @Async

  @Scheduled(固定延迟=2000)

  public void second() {

  第二个计划任务开始: localdatetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));

  system . out . println();

  }

  }@EnableAsync:开启多线程

  启动项目,运行结果如下:

  第一个计划任务的开始时间:21:48:40 . 400000000001

  线程:任务1

  第二个计划的任务开始时间:21:48:40。50600.66866868661

  线程:任务2

  第一个计划任务的开始时间:21:48:40 . 40000000001

  线程:任务3

  第二个计划任务开始于21:48:49.114640。

  线程:任务4

  第一个计划任务开始于21:48:49.114640。

  线程:任务5

  第一个计划任务的开始时间:21:48:50 . 40000000001

  线程:任务6

  第二个计划的任务开始时间:21:48:5 . 54686 . 36868686667

  线程:任务7

  第一个计划任务的开始时间:21:48:5 53686 . 48686868661

  线程:任务8

  第一个计划任务的开始时间:21:48:50。56600.66866868661

  线程:任务2

  第二个计划的任务开始时间:21:48:53。54600.66866868661

  线程:任务4

  第一个计划任务开始于21:48:53.140095。

  线程:任务7

  第一个计划任务的开始时间:21:48:5 53686 . 48686868661

  线程:任务4

  第二个计划任务开始于21:48:57.130710。

  Thread:上面的task-1是SpringBoot- timed任务的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: