springboot异步任务

springboot开启异步任务只需要两个注解:@EnableAsync和@Async。

springboot启动类上添加@EnableAsync注解来使springboot支持异步
@Async可以添加在类上,也可添加在方法上。如果注解在类级别,则表明该类所有的方法都是异步方法,而这里的方法自动被注入使用ThreadPoolTaskExecutor作为TaskExecutor。
需要注意的是@Async并不支持用于被@Configuration注解的类的方法上。同一个类中,一个方法调用另外一个有@Async的方法,注解也是不会生效的。
启动类

package com.example.bootonly;

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

@SpringBootApplication
// 使spring boot支持异步
@EnableAsync
public class BootOnlyApplication {

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

}

异步方法类

package com.example.bootonly.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * @author liujy
 * @description 异步方法
 * @since 2021-03-17 14:33
 */
// 这个类中的方法都是异步方法
@Async
@Slf4j
@Service
public class TaskService {
    public void s() throws InterruptedException {
        System.out.println("异步任务start");
        // 代替业务代码
        Thread.sleep(10000);
        System.err.println(Thread.currentThread().getName());
        System.out.println("异步任务end");
    }
}

Controller

package com.example.bootonly.test;

import com.example.bootonly.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author liujy
 * @description
 * @since 2021-03-17 14:45
 */
@RestController
public class TaskTest {
    @Autowired
    private TaskService taskService;

    @RequestMapping("/task")
    public String task() throws InterruptedException {
        System.out.println("controller start");
        taskService.s();
        System.out.println("controller end");
        return "success";
    }
}

启动项目,用浏览器发起请求,可以多请求几次,发现可以立即返回success。


测试

而异步任务随后陆续完成:


测试结果

推荐阅读更多精彩内容