介绍
在现在的Java应用程序中,异步处理是为了提高系统性能和响应速度的手段之一,在SpringBoot中 @Async 注解被用于声明一个异步的方法,当在调用被 @Async 注解修饰的方法时, Spring 会异步执行这个方法,调用者可以立即继续实行后续的操作,而不用等待该方法完成。尤其是在处理耗时的操作时,例如 文件IO、数据库查询、网络请求等,异步处理是很好的选择。
一、@Async注 解的基本使用
@Async 注解用于标记在方法上,被标记的方法将会在独立的线程中执行。@Async是SpringBoot提供的一种简便的用于启用异步方法的执行。仅需要在配置类或者主类上添加 @EnableAsync 注解,就可以轻松启用这一功能。
二、代码示例
在项目的 pom,xnl 文件中添加相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
在项目的配置类或者主类上 添加 @EnableAsync 注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync
public class AsyncApplication {
public static void main(String[] args) {
SpringApplication.run(AsyncApplication.class, args);
}
}
创建异步执行方法:
使用 @Async 注解定义一个异步方法(创建服务类 AsyncService)
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
@Async
public void asyncMethod() {
try {
Thread.sleep(5000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("异步方法执行完成");
}
}
调用方法:
创建一个 Controller 用来测试异步执行的方法;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class AsyncController {
@Autowired
private AsyncService asyncService;
@GetMapping("/async")
public String callAsyncMethod() {
asyncService.asyncMethod();
return "异步方法已调用";
}
}
访问测试接口后,http://localhost:8080/api/async 后可以发现 Controller 立即返回了响应结果,而且 asyncMethod 将在独立的线程中执行,五秒后会在控制台输出 “异步方法执行成功”。
三、应用场景
@Async 注解使用于各种需要异步处理的场景,在这里举例几个常用的场景。
-
后台任务处理:在 WEB 应用中,对于执行时间较长且资源密集的任务,例如邮件发送、报告生成等,可以利用 @Async 注解来实现异步处理机制。这样可以使用户无需长时间登录这些后台任务的完成,即可立即得到响应结果,从而提高用户提要。
-
并行处理:在一些大规模数据处理和需要同时多个外部应用程序的情况下,@Async 注解同样能发挥重要作用,通过将任务异步处理,可以明显的提高并行的操作效率,减少总体的处理时间。
-
提高吞吐量:可以充分例如多线程资源,提高系统的吞吐量。
四、总结
在SpringBoot 中 @Async 注解提供了一种简洁且强大的异步处理方式,通过启用一不支持,可以高效的提高代码执行效率,有助于提升应用系统的性能和响应速度。
原文始发于微信公众号(Java技术前沿):SpringBoot实战:SpringBoot异步处理注解 @Async
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/299685.html