软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot异步任务使用方法详解

SpringBoot异步任务使用方法详解

作者:玉天恒  发布时间:2021-08-07 07:57:02 

标签:Spring,Boot,异步,任务

步骤,如图所示:

SpringBoot异步任务使用方法详解

1.添加异步任务业务类


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.添加测试控制器


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.添加启动类


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启动,访问url


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

结果:

SpringBoot异步任务使用方法详解

来源:https://www.cnblogs.com/tianhengblogs/p/9824271.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com