Spring Boot 多线程定时任务

Spring Boot的Scheduled定时任务默认是单线程的,比如下面这样的写法、

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

@Scheduled(cron = "0 0/1 * * * ?")
public void task2() {
     System.out.println("-----task2")
}

他是按照顺序执行的, 先task1然后task2,这样有几个点缺点:1. 执行效率低,不能同时执行,2. 第一个任务卡死,后面的任务都执行不了,影响较大

接下来我们将改成多线程

1. 在Application上添加@EnableScheduling来开启定时任务调度功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2. 修改bootstrap.yml配置文件,添加多任务配置,这里配置50个线程

spring:
  application:
    name: myTask
  task:
    execution:
      pool:
        core-size: 50
      thread-name-prefix: mytask-

3. 修改定时任务如下,同时加上@Async代表异步执行,卡住不影响下一次的执行

@Async
@Scheduled(cron = "0 0/1 * * * ?")
public void task1() {
      System.out.println("-----task1");
}

@Async
@Scheduled(cron = "0 0/1 * * * ?")
public void task2() {
     System.out.println("-----task2")
}

以上就是多线程定时任务异步执行了

你可能感兴趣的:(spring-boot)