SpringBoot异步任务使用方法详解

网友投稿 392 2022-12-12


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 task4() throws InterruptedException {

long begin = System.currentTimeMillis();

Thread.sleep(1000);

lohttp://ng end = System.currentTimeMillis();

System.out.println("任务4耗时:" + (end - begin));

return new AsyncResult("任务4");

}

public Future task5() throws InterruptedException {

long begin = System.currentTimeMillis();

Thread.sleep(2000);

long end = System.currentTimeMillis();

System.out.println("任务5耗时:" + (end - begin));

return new AsyncResult("任务5");

}

public Future task6() throws InterruptedException {

long begin = System.currentTimeMillis();

Thread.sleep(3000);

long end = System.currentTimeMillis();

System.out.println("任务6耗时:" + (end - begin));

return new AsyncResult("任务6");

}

}

2.添加测试控制器

package top.ytheng.demo.controller;

import java.util.concurrent.ExecutionException;

importwkNfNXXAI 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 result1 = asyncTask.task4();

Future result2 = asyncTask.task5();

Future 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

结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java基于自定义类加载器实现热部署过程解析
下一篇:SpringCloud Feign的使用代码实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~