当前位置: 首页 > news >正文

玉溪市建设厅官方网站海珠网站建设

玉溪市建设厅官方网站,海珠网站建设,定制公司网站,昆明公司建设网站制作在 Spring Boot 中,Async 注解用于实现异步方法调用,允许方法在单独的线程中执行,从而避免阻塞主线程,提升应用的并发处理能力。 1. 基本用法 在 Spring Boot 中使用 Async 很简单,主要步骤如下: 步骤 1…

在 Spring Boot 中,@Async 注解用于实现异步方法调用,允许方法在单独的线程中执行,从而避免阻塞主线程,提升应用的并发处理能力。

1. 基本用法

在 Spring Boot 中使用 @Async 很简单,主要步骤如下:

步骤 1:启用异步支持

首先,需要在 Spring Boot 应用程序的启动类或配置类上加上 @EnableAsync 注解,以启用异步方法的支持。

@SpringBootApplication
@EnableAsync
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
步骤 2:定义异步方法

然后,在需要异步执行的方法上加上 @Async 注解。注意,异步方法需要返回 voidFuture 类型(如 CompletableFuture)。

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;@Service
public class AsyncService {@Asyncpublic void asyncMethod() {// 模拟耗时操作try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("异步方法执行完成");}@Asyncpublic CompletableFuture<String> asyncMethodWithReturn() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return CompletableFuture.completedFuture("异步方法带返回值执行完成");}
}
步骤 3:调用异步方法

当调用 @Async 注解的方法时,方法将会在独立的线程中执行,不会阻塞调用它的线程。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.CompletableFuture;@RestController
public class AsyncController {@Autowiredprivate AsyncService asyncService;@GetMapping("/async")public String callAsyncMethod() {asyncService.asyncMethod();return "调用了异步方法";}@GetMapping("/async-with-return")public CompletableFuture<String> callAsyncMethodWithReturn() {return asyncService.asyncMethodWithReturn();}
}

2. 自定义线程池

默认情况下,Spring 使用 SimpleAsyncTaskExecutor 来处理异步任务,但你可以自定义线程池来管理这些任务。

自定义线程池配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@Configuration
@EnableAsync
public class AsyncConfig {@Bean(name = "asyncExecutor")public Executor asyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(25);executor.setThreadNamePrefix("AsyncThread-");executor.initialize();return executor;}
}

然后,在异步方法上指定使用这个线程池:

@Async("asyncExecutor")
public void asyncMethod() {// 方法实现
}

3. 异步方法的限制

  • 异步方法不能是 private 方法,因为 Spring 需要通过代理对象来处理异步调用。
  • 异步方法必须通过代理对象调用,不能直接在同一个类内部调用,否则 @Async 不会生效。

4. 异步方法异常处理

对于返回 FutureCompletableFuture 的异步方法,可以通过 .exceptionally().handle() 方法处理异常:

@Async
public CompletableFuture<String> asyncMethodWithException() {return CompletableFuture.supplyAsync(() -> {if (true) {throw new RuntimeException("异常发生");}return "成功";}).exceptionally(ex -> "处理异常: " + ex.getMessage());
}

对于 void 类型的异步方法,可以使用 AsyncUncaughtExceptionHandler 处理未捕获的异常:

import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;import java.lang.reflect.Method;@Configuration
public class AsyncExceptionHandler implements AsyncConfigurer {@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new AsyncUncaughtExceptionHandler() {@Overridepublic void handleUncaughtException(Throwable ex, Method method, Object... params) {System.out.println("异步方法出现未捕获异常: " + ex.getMessage());}};}
}

总结

@Async 注解为 Spring Boot 提供了非常简洁的异步调用支持,能有效提升应用的并发处理能力。通过自定义线程池和异常处理机制,还可以更好地控制异步任务的执行与监控。

http://www.yayakq.cn/news/984092/

相关文章:

  • 学院网站建设成效wordpress扫码登录
  • 博物馆网站建设情况校园网站建设
  • 南昌旅游集团网站建设电商网站建设参考文献
  • 新闻类的网站有哪些类型设计的网站源代码怎么做
  • 广州哪家做网站还可以重庆平台
  • 大数据比赛网站建设营销策划精准营销
  • asp网站源码+access+机械网站建设人员岗位职责
  • 网站优怎么做wordpress红色
  • 开发网站需要什么成都网站建设外包
  • 上海微网站公司网站想换个风格怎么做
  • 分类信息网站建设系统wordpress 链接新窗口
  • 网站建设优化方案有网站前台如何做后台
  • 品牌网站建设相关问题哪个网站做黄金交易最好
  • 沪佳家装和沪尚茗居哪个好郑州seo哪家公司最强
  • 深圳网站建设网站制作公司宣传册页面设计模板
  • 网站访问量统计怎么做做co的网站
  • 龙南县建设局网站wordpress图片资源主题
  • 中国建设银行 英文网站哪个推广网站好
  • 桂林手机网站建设网站建设方案ppt 枫子科技
  • 做兼职女的网站专业网页制作费用
  • 网站建设哪家专业电子商务平台经营者接到通知后
  • 新建网站求友链平台完全免费的网站源码
  • 百度如何把网站做链接建立大数据平台
  • 江西省建设培训中心网站网页制作视频教程自学网
  • 双公示 网站专栏建设网站关键词在哪
  • 湛江住房和城乡建设部网站温州文成县高端网站设计
  • 伊犁做网站wordpress安装主题提示错误
  • 怎么进网站后台管理系统佛山外贸网站建设效果
  • 百度模板网站模板下载网站模板怎么使用教程
  • 产品网站建站cpa推广之家