复盘SpringBoot的@Ascyn注解失效问题

复盘SpringBoot的@Ascyn注解失效问题

在实际使用项目中,我们经常会遇到异步与同步任务的线程问题。在我的实际应用项目中也存在一些异步任务,如定时发布消息通知、定期清理任务、异步下载信息同步等,异步应用场景应用相当广泛,而在Spring框架中就为我们搭建了一个快速构建异步任务的方法,本文中将分享我笔记中的错误分析及解决方案。

一、案例分析

在使用@Ascyn注解制作一个异步消息发送时遇到注解失效问题,明明已经为方法加入了注解,为什么无法异步执行,经过检查该异步任务的确处于主线程中执行。

首先一定需要新建配置类AsyncConfig。并开启@EnableAsync写上@Configuration注解。

@EnableAsync@ConfigurationpublicclassAsyncConfig{// to-do...}

简单重现异步失效的代码:

@ServicepublicclassMyAsyncTask{publicvoidstartAsyncTask(){this.asyncTask();}@AsyncpublicvoidasyncTask(){System.out.println("异步任务开始,线程名:"+Thread.currentThread().getName());}publicstaticvoidmain(String[]args){// 直接实例化对象,并且自调用。newMyAsyncTask().startAsyncTask();}}

二、原因分析

经过查阅相关资料后,发现Spring是通过AOP代理的机制来完成异步任务的,如果是从类中的方法调用异步方法,会自动绕过代理机制直接执行该方法,因此注解才会失效。现在我们把代码稍微调整一下:

@ServicepublicclassMyAsyncTask{// 仅外部调用@AsyncpublicvoidasyncTask(){System.out.println("异步任务开始,线程名:"+Thread.currentThread().getName());}}

在类的外部进行调用,如单元测试中使用代理注入,直接调用该异步代码:

@AutowiredMyAsyncTaskmyAsyncTask;@TestvoidcontextLoads(){nmyAsyncTask.asyncTask();}

如果我们一定要在同一类中调用方法,可以将该方法使用context上下文包装为一个代理类,然后同过代理类的方式进行方法的调用:

@AutowiredprivateApplicationContextcontext;// 调用此方法是完全OK的publicvoidcaller(){context.getBean(MyAsyncTask.class).asyncMethod();}

三、常见错误情况

1. 未使用代理方式新建实例

如果使用传统的new MyAsyncTask()方式调用是无法使用的,一定要经过代理,使用@Component@Service@Bean注解的方式调用,才能正常被代理异步。

// 错误示范@TestvoidcontextLoads(){newMyAsyncTask().asyncTask();}

2. 异步方法有返回值

如果异步方法有返回值,那必须是FutureCompletableFuture等类型进行包装返回。

@AsyncpublicCompletableFuture<String>asyncTask(){returnCompletableFuture.completedFuture("result");}

3.@Async 方法抛异常后未被感知

异步方法抛异常但未返回FutureCompletableFuture时,异常不会传播。

// 正确方式@AsyncpublicCompletableFuture<String>asyncMethod(){try{// ...returnCompletableFuture.completedFuture("OK");}catch(Exceptione){returnCompletableFuture.failedFuture(e);}}

四、总结

使用Spring框架虽然方便,但是我们也要用正确的方式使用工具,否则会为我们的工程带来很多复杂的问题,学会如何正确使用@Ascyn注解,推荐阅读这篇文章:Java 注解篇:@Async,更多的情况案例我这里就不罗列了,可以在日常的代码编写中发现问题并寻求解决方案,最后解决我问题的文章也可以分享给大家,非常感谢这篇文章的解答:@Async 注解为什么不生效?如何排查?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1149608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot3集成LiteFlow!轻松实现业务流程编排

集成LiteFlow到Spring Boot 3在Spring Boot 3项目中引入LiteFlow依赖&#xff0c;需在pom.xml中添加以下配置&#xff1a;<dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.1…

JavaScript 对大整数(超过 2^53 - 1)的精度丢失问题

遇到的问题&#xff1a;后端返回的用户 ID 大概率是 Long 类型&#xff08;64 位整数&#xff09;&#xff0c;而 JavaScript 的 Number 类型仅能精确表示 53 位整数&#xff0c;当 ID 超过 2^53 - 1&#xff08;即 9007199254740991&#xff09;时&#xff0c;超出部分会被截断…

香江入梦·西湖共影:陈福善120周年大展在杭州启幕

​杭州&#xff0c;2026年元月&#xff0c;水光潋滟处&#xff0c;一场跨越香江与西湖的梦&#xff0c;悄然靠岸。由中心美术馆主办的《福善幻境——陈福善120周年大展》在杭州武林门古码头旁的杭州中心正式拉开帷幕。这位被誉为“香港水彩王”的艺术巨匠作品时隔近八年后再次大…

轻量高效!HY-MT1.5-1.8B模型在边缘设备的实时翻译应用

轻量高效&#xff01;HY-MT1.5-1.8B模型在边缘设备的实时翻译应用 在跨语言交流日益频繁的今天&#xff0c;传统云端翻译服务虽已成熟&#xff0c;却面临网络依赖、隐私泄露和延迟高等问题。尤其在医疗、法律、教育等对数据安全要求极高的场景中&#xff0c;离线部署的高精度翻…

如何实现专业级翻译?基于HY-MT1.5-7B的术语干预与格式保留实践

如何实现专业级翻译&#xff1f;基于HY-MT1.5-7B的术语干预与格式保留实践 随着全球化进程加速&#xff0c;跨语言内容处理需求激增。然而&#xff0c;通用机器翻译在专业领域常面临术语不一致、上下文缺失、格式错乱等问题&#xff0c;难以满足企业级应用对准确性与一致性的严…

使用Alpaca-LoRA微调类ChatGPT模型的实践指南

如何使用Alpaca-LoRA微调类似ChatGPT的模型 低秩自适应&#xff08;LoRA&#xff09;是一种用于微调模型的技术&#xff0c;相比之前的方法具有一些优势&#xff1a; 它更快且占用更少内存&#xff0c;这意味着可以在消费级硬件上运行。输出文件要小得多&#xff08;以兆字节计…

腾讯开源HY-MT1.5翻译大模型:小参数实现高质量翻译

腾讯开源HY-MT1.5翻译大模型&#xff1a;小参数实现高质量翻译 1. 引言&#xff1a;机器翻译的新范式——效率与质量的再平衡 在大模型“军备竞赛”愈演愈烈的今天&#xff0c;通用语言模型动辄千亿参数、数百GB显存需求&#xff0c;虽具备强大泛化能力&#xff0c;但在垂直任…

项目经理能力强不强,看他遇事的反应就知道了!

在项目管理中&#xff0c;突发状况是常态&#x1f649;&#xff0c;而且现在的项目变化的确也比以前更多——人更灵活不好管、风险更奇怪没见过、客户需求多更难说服等。 而遇到这些挑战时的第一反应&#xff0c;基本就能看出这个人适不适合做项目经理了。 1.遇事时&#xff…

告别CUDA报错:预置镜像一键运行AI分类器

告别CUDA报错&#xff1a;预置镜像一键运行AI分类器 引言 作为一名算法工程师&#xff0c;最头疼的莫过于换了新电脑后面对各种CUDA版本冲突、依赖库不兼容的问题。特别是当项目紧急需要恢复分类服务时&#xff0c;传统的手动配置环境往往需要耗费数小时甚至更长时间。这时候…

基于HY-MT1.5-7B大模型的多语言翻译实践|边缘部署与实时推理

基于HY-MT1.5-7B大模型的多语言翻译实践&#xff5c;边缘部署与实时推理 在跨语言交流日益频繁的今天&#xff0c;高质量、低延迟的机器翻译能力已成为智能应用的核心需求。腾讯开源的混元翻译大模型 HY-MT1.5-7B 以其卓越的多语言支持能力和对混合语种场景的精准处理&#xf…

腾讯混元翻译模型开源|HY-MT1.5实现多语言实时互译

腾讯混元翻译模型开源&#xff5c;HY-MT1.5实现多语言实时互译 1. 引言&#xff1a;大模型驱动下的翻译技术新范式 随着全球化进程加速&#xff0c;跨语言沟通需求激增。传统机器翻译系统在质量、延迟和部署成本之间难以平衡&#xff0c;尤其在边缘设备和实时场景中表现受限。…

三菱FX3U源码探秘:老司机带你玩转硬核PLC

三菱FX3U底层源码,PLSR源码&#xff0c;4路脉冲输出 总体功能和指令可能支持在RUN中下载程序&#xff0c;支持注释的写入和读取&#xff0c;支持脉冲输出与定位指令(包括PLSY /PWM/PLSR/PLSV/DRVI /DRVA 等指令)。 对于FX3U&#xff0c;支持波特率9600/19200/38400/57600/11520…

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16&#xff1a;飞牛云NAS换桌面&#xff0c;fndesk图标管理神器上线&#xff01; 引言 哈喽大家好&#xff0c;我是星哥&#xff0c;今天想跟大家聊聊一个特别实用的工具——fndesk&#xff0c;它能让你的飞牛云NAS桌面变得随心所欲。 飞牛云NAS虽然好用&…

如何在Windows上配置Windows防火墙,零基础入门到精通,收藏这篇就够了

打开Windows防火墙设置 通过控制面板&#xff1a;点击【开始】>【控制面板】>【系统和安全】>【Windows防火墙】。 通过搜索框&#xff1a;在任务栏的搜索框中输入“防火墙”&#xff0c;选择“Windows防火墙”。查看当前防火墙状态 在Windows防火墙设置界面&#xff…

支持术语干预与上下文翻译|HY-MT1.5大模型落地指南

支持术语干预与上下文翻译&#xff5c;HY-MT1.5大模型落地指南 随着多语言交流场景的不断扩展&#xff0c;传统云端翻译服务在隐私保护、网络依赖和响应延迟等方面的局限性日益凸显。特别是在企业级文档处理、边缘设备部署和少数民族语言支持等高敏感性或低资源环境中&#xf…

开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利&#xff1a;免费 .frii.site 子域名&#xff0c;一分钟申请即用前言在学习 Web 开发、部署项目、测试 API 或者搭建个人 Demo 时&#xff0c;一个可访问的域名往往是必需品。但很多同学不想为测试环境额外花钱&#xff0c;或者只是临时用一下&#xff0c;这时候免费…

三菱PLC功能块FB程序集(九个实用案例) - 清晰注释,成熟稳定应用,适用于伺服与变频器通讯...

三菱PLC功能块FB程序打包&#xff08;共九个&#xff09; 用的FB功能块写法&#xff0c;程序包括伺服FB和变频器通讯FB&#xff0c;编程方式非常清晰明了&#xff0c;程序都有注释、注释全面&#xff0c;包括三菱FX3U和Q系列plc。 可借鉴、可做模板&#xff0c;这些程序已经设…

电机控制工程师的日常调试中,最头疼的就是手里没示波器还要调过零点。今天咱们撸起袖子聊聊无位置BLDC的反电势检测,手把手造个能跑的模型出来

BLDC无位置反电势过零点检测模型先得明白反电势过零点的本质——当某相绕组反电势穿过零电位时&#xff0c;就是换相的最佳时机。但没位置传感器的情况下&#xff0c;咱得从悬空相端电压里扒拉出这个信号。硬件部分得保证电机中性点电压能被准确测量。这里有个取巧的方法&#…

从零部署多语言AI翻译|基于HY-MT1.5镜像的完整实践路径

从零部署多语言AI翻译&#xff5c;基于HY-MT1.5镜像的完整实践路径 在跨语言交流日益频繁的今天&#xff0c;高质量、低延迟的机器翻译能力已成为企业出海、政务服务、教育公平等场景的核心支撑。腾讯混元团队开源的 HY-MT1.5-1.8B 翻译模型&#xff0c;作为轻量级高性能翻译大…

vLLM加速HY-MT1.5-7B实战|实现低延迟高精度翻译服务

vLLM加速HY-MT1.5-7B实战&#xff5c;实现低延迟高精度翻译服务 随着全球化进程的不断推进&#xff0c;高质量、低延迟的多语言翻译服务已成为企业出海、跨文化交流和本地化运营的核心基础设施。腾讯开源的混元翻译大模型 1.5 版本&#xff08;HY-MT1.5&#xff09;在WMT25夺冠…