zoukankan      html  css  js  c++  java
  • @Scheduled并行执行

    spring自带的任务调度是串行执行的,串行执行什么意思呢?
    就是第一个方法执行完成之后才会执行第二个方法.举个栗子:要是我两个方法都是每一秒执行一次,第一个方法执行时间比较长,那么第二个方法就不是每一秒执行了…但是不同类却是异步的.

    @Component
    public class Test{
    @Scheduled(cron = "0/1 * * * * ?")
    public void methodOne() {
    log.error("执行方法一...");
    try {
    Thread.sleep(5000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    @Scheduled(cron = "0/1 * * * * ?")
    public void methodTwo() {
    log.error("执行方法二...");
    try {
    Thread.sleep(5000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    现在我想,方法一方法二同时执行,则叫做并行.要是我想方法一还在睡眠的时候,并不管他有没有执行完,直接执行下一次的话,那就是方法的异步执行了.参考https://blog.csdn.net/qq_38366063/article/details/87005949,使用@Async注解到对应的方法上即可.并行操作的配置类:

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.TaskScheduler;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;

    /**
    * 定时任务并行执行
    **/
    @Configuration
    @EnableScheduling
    @Slf4j
    public class ScheduledConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
    TaskScheduler scheduler = this.taskScheduler();
    scheduledTaskRegistrar.setTaskScheduler(scheduler);
    }

    @Bean(destroyMethod = "shutdown")
    public ThreadPoolTaskScheduler taskScheduler() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(10);
    scheduler.setThreadNamePrefix("task-");
    scheduler.setAwaitTerminationSeconds(60);
    scheduler.setWaitForTasksToCompleteOnShutdown(true);
    return scheduler;
    }

    在执行,发现方法一方法二同时执行的;将setPoolSize设置线程个数,如果设置为1,就代表是串行的,执行就会发现时间很长…一般看定时任务的量,来合理设置size.


    ————————————————
    版权声明:本文为CSDN博主「你就像甜甜的益达」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_38366063/article/details/87008254

  • 相关阅读:
    jQuery
    编程英语
    Javaweb基础案例
    Maven-基础设置教程
    .Net微服务实践(三):Ocelot配置路由和请求聚合
    .Net微服务实践(二):Ocelot介绍和快速开始
    ASP.NET Core技术研究-探秘Host主机启动过程
    Docker安装手册
    HBase文档学习顺序
    考研学习笔记极限与连续笔记顺序
  • 原文地址:https://www.cnblogs.com/javalinux/p/15093909.html
Copyright © 2011-2022 走看看