开发者学堂课程【SpringBoot 快速掌握 - 高级应用:课时名称】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/613/detail/9309
异步任务
定时任务的创建
创建一个工程,
groups:comatguigu,Artifact:springboot-04-task
Package: com.atguigu.task,点击 next。
选择1,5.12版本,先只选择 web 模块,点击 next,完成创建。
先来测试 eb 任务,
创建一个 src,点击 task,new,java class,
Creat new class
Name:service.asyncservice,点击 OK 创建完成。
Eb 任务还是非常常见的,例如发送邮件,处理数据时,不想让他阻塞下面的线程,就可以用多线程的形式进行一些 eb 处理。
package com.atguigu.task.service;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
public void hello(){
try{
Thread.sLeep( millis: 3000) ;
}catch (InterruptedException e) {
e.printstackTrace();
}
System.out.println("处理数据中...");
}
}
调用这个方法需要漫长的等待点击 task,new,java class, Creat new class
Name:controller.asynccontroller
package com.atguigu.task.controller;
import com.atguigu.task.service.AsyncService;
importorg.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;
@RestController
public class AsyncController i
@Autowired
AsyncService asyncService;
@GetMapping( " / he1lo")
public String hello(){
asyncService.hello();
return "success";l
运行,
假如不希望用户在三秒以后得到响应,可以写成多线程的方式让他运行,但每次编写过于麻烦,所以可以在上述方法中加一个注解。
@Async
mportorg.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;
@RestController
@Async//告诉spring这是一个异步方法
public class AsyncController i
@Autowired
AsyncService asyncService;
@GetMapping( " / he1lo")
public String hello(){
asyncService.hello();
return "success";l
同时需要:
package com.atguigu.task;
import ...
EnableAsync 1
/开启异步注解功能
SpringBootApplication
public class Springboot84TaskApplication {
publicstaticvoidmain(String[] args){ SpringApplication.run(Springboot04TaskApplication.
}
此时立即响应,并且不需要等待三秒。