SpringBoot------異步任務的使用

步驟,如圖所示:java

1.添加異步任務業務類web

package top.ytheng.demo.task;

import java.util.concurrent.Future;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

//異步任務業務類
@Component
//標記此類是異步類,也可在方法中標記
//不加,則類裏面的方法爲同步執行
@Async
public class AsyncTask {

    public void task1() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任務1耗時:" + (end - begin));
    }
    
    public void task2() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任務2耗時:" + (end - begin));
    }
    
    public void task3() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("任務3耗時:" + (end - begin));
    }
    
    //測試拿到返回結果
    public Future<String> task4() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任務4耗時:" + (end - begin));
        return new AsyncResult<String>("任務4");
    }
    
    public Future<String> task5() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任務5耗時:" + (end - begin));
        return new AsyncResult<String>("任務5");
    }
    
    public Future<String> task6() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("任務6耗時:" + (end - begin));
        return new AsyncResult<String>("任務6");
    }
}

2.添加測試控制器spring

package top.ytheng.demo.controller;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import top.ytheng.demo.task.AsyncTask;

@RestController
@RequestMapping("api/v1/async")
public class TaskController {

    @Autowired
    private AsyncTask asyncTask;
    
    @GetMapping("/test")
    public Object test() throws InterruptedException, ExecutionException {
        long begin = System.currentTimeMillis();
        //asyncTask.task1();
        //asyncTask.task2();
        //asyncTask.task3();
        Future<String> result1 = asyncTask.task4();
        Future<String> result2 = asyncTask.task5();
        Future<String> result3 = asyncTask.task6();
        System.out.println("返回結果:" + result1.get() + "," + result2.get() + "," + result3.get());
        for(;;) {
            if(result1.isDone() && result2.isDone() && result3.isDone()) {
                break;
            }
        }
        long end = System.currentTimeMillis();
        long total = end - begin;
        System.out.println("總耗時:" + total);
        return "總耗時:" + total;
    }
}

3.添加啓動類api

package top.ytheng.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication //等於下面3個
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan
//攔截器用到
@ServletComponentScan
//MyBatis用到
@MapperScan("top.ytheng.demo.mapper")
//定時使用(開啓定時任務)
@EnableScheduling
//開啓異步任務
@EnableAsync
public class DemoApplication {

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

4.右鍵項目Run As啓動,訪問urlmybatis

http://localhost:8080/api/v1/async/test

結果:app

相關文章
相關標籤/搜索