专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SpringBoot中如何优雅地实现异步调用?

  前言
  SpringBoot想必大家都用过,但是大家平时使用发布的接口大都是同步的,那么你知道如何优雅的实现异步呢?
  这篇文章就是关于如何在SpringBoot中实现异步行为的。但首先,让我们看看同步和异步之间的区别。同步编程:在同步编程中,任务一次执行一个,只有当一个任务完成时,下一个任务才会被解除阻塞。异步编程:在异步编程中,可以同时执行多个任务。您可以在上一个任务完成之前转到另一个任务。
  在SpringBoot中,我们可以使用Async注解来实现异步行为。实现步骤定义一个异步服务接口AsyncService。javapublicinterfaceAsyncService{voidasyncMethod()throwsInterruptedException;FutureStringfutureMethod()throwsInterruptedException;}复制代码实现定义的接口AsyncServiceImpl。javaServiceSlf4jpublicclassAsyncServiceImplimplementsAsyncService{AsyncOverridepublicvoidasyncMethod()throwsInterruptedException{Thread。sleep(3000);log。info(Thread:〔{}〕,Callingotherservice。。,Thread。currentThread()。getName());}AsyncOverridepublicFutureStringfutureMethod()throwsInterruptedException{Thread。sleep(5000);log。info(Thread:〔{}〕,Callingotherservice。。,Thread。currentThread()。getName());returnnewAsyncResult(taskDone);}}复制代码AsyncServiceImpl是一个spring管理的bean。您的异步方法必须是公共的,而且是被Async注解修饰。返回类型被限制为void或Future。定义一个控制器AsyncController。javaEnableAsyncRestControllerSlf4jpublicclassAsyncController{AutowiredAsyncServiceasyncService;GetMapping(async)publicStringasyncCallerMethod()throwsInterruptedException{longstartSystem。currentTimeMillis();log。info(callasyncmethod,threadname:〔{}〕,Thread。currentThread()。getName());asyncService。asyncMethod();Stringresponsetaskcompletesin:(System。currentTimeMillis()start)milliseconds;returnresponse;}GetMapping(asyncFuture)publicStringasyncFuture()throwsInterruptedException,ExecutionException{longstartSystem。currentTimeMillis();log。info(callasyncmethod,threadname:〔{}〕,Thread。currentThread()。getName());FutureStringfutureasyncService。futureMethod();阻塞获取结果StringtaskResultfuture。get();StringresponsetaskResulttaskcompletesin:(System。currentTimeMillis()start)milliseconds;returnresponse;}}复制代码关键点,需要添加启用异步的注解EnableAsync,当然这个注解加在其他地方也ok得。当外部调用该接口时,asyncMethod()将由默认任务执行程序创建的另一个线程执行,主线程不需要等待完成异步方法执行。运行一下
  现在我们运行一下看看,是不是异步返回的。
  可以看到调用async接口,最终一步调用了方法。
  调用asyncFuture,发现返回5秒多,难道不是异步的吗?其实也是异步的,看日志可以看出来,只不过我们返回的是Future,调用Futrue。get()是阻塞的。自定义异步任务执行器和异常处理
  我们现在看看如果异常方法中报错了会怎么样?修改异步代码如下所示,会抛运行时异常:
  再次执行异步接口,如下所示,会使用默认的线程池和异常处理。
  我们也可以自定义异步方法的处理异常和异步任务执行器,我们需要配置AsyncUncaughtExceptionHandler,如下代码所示:ConfigurationpublicclassAsynConfigurationextendsAsyncConfigurerSupport{OverridepublicExecutorgetAsyncExecutor(){ThreadPoolTaskExecutorexecutornewThreadPoolTaskExecutor();executor。setCorePoolSize(3);executor。setMaxPoolSize(4);executor。setThreadNamePrefix(asyntaskthread);executor。setWaitForTasksToCompleteOnShutdown(true);executor。initialize();returnexecutor;}OverridepublicAsyncUncaughtExceptionHandlergetAsyncUncaughtExceptionHandler(){returnnewAsyncUncaughtExceptionHandler(){OverridepublicvoidhandleUncaughtException(Throwableex,Methodmethod,Object。。。params){System。out。println(Exception:ex。getMessage());System。out。println(MethodName:method。getName());ex。printStackTrace();}};}}复制代码
  再次运行,得到的结果如下:
  Async如何工作的?
  必须通过使用EnableAsync注解注解主应用程序类或任何直接或间接异步方法调用程序类来启用异步支持。主要通过代理模式实现,默认模式是Proxy,另一种是AspectJ。代理模式只允许通过代理拦截调用。永远不要从定义它的同一个类调用异步方法,它不会起作用。
  当使用Async对方法进行注解时,它会根据proxyTargetClass属性为该对象创建一个代理。当spring执行这个方法时,默认情况下它会搜索关联的线程池定义。上下文中唯一的spring框架TaskExecutorbean或名为taskExecutor的Executorbean。如果这两者都不可解析,默认会使用spring框架SimpleAsyncTaskExecutor来处理异步方法的执行。总结
  在本文中,我们演示了在springboot中如何使用Async注解和异步方法中的异常处理实现异步行为。我们可以在一个接口中,需要访问不同的资源,比如异步调用各个其他服务的接口,可以使用Async,然后将结果通过Future的方式阻塞汇总,不失为一个提高性能的好方法。

国足11阿曼!出线无望!国足最大的短板是李铁吗?理论上还有!!!中国人不是都会算术吗???先斩澳大利亚,后杀日本!!!做为阿曼著名足球运动员,他做的很棒!不是李铁的责任,因为他是阿曼的核心球员。当然不是李铁的责任。是特么足球的责曝女排传出退役风波!核心主力几乎走光,李盈莹能否扛起全队?自己愿意退役别人拦也拦不住,接广告挣钱一个比一个踊跃,国家需要你的时候选择退役,个人选择无可厚非,人品不评价!地球没有谁都转,我们看女排主要看的是女排精神,只要打出风格赛出勇气,作男篮国家队12人预测都会有谁?为什么杜锋不选郭昊文和余嘉豪?郭昊文和余嘉豪都是00后,郭昊文21岁,余嘉豪才18岁,两人还很稚嫩,四年之后下一届男篮世界杯的预选赛两人是有可能入选男篮国家队的,这次还是算了吧。郭昊文确实是很有潜力的后卫,但现当今的CBA教练中,李春江与郭士强相比谁更强?要说蓝球教练郭士强和李春江谁最强,这要说名气肯定是李春江,毕竟是多年的冠军教练,缺点就是脾气太大,心高气傲,人品素质差。作为辽蓝主帅郭士强,指教水平也很高,做人特别低调,不善张扬,瓦拉内我将会在曼联或朗斯退役过多比赛对球员的要求超出极限直播吧3月25日讯曼联后卫瓦拉内在接受GQ杂志采访时,回应了选择在29岁从法国国家队退役未来在哪结束职业生涯的的话题。谈及在29岁的年龄结束自己的国家队生涯瓦拉内现如今对于球员的身好汉归来!武汉马拉松4月16日鸣枪开跑3月24日,记者从2023武汉体育消费周暨中国银行武汉马拉松新闻通气会获悉2023武汉马拉松将于4月16日上午730鸣枪起跑。主办方同时宣布,2023武汉体育消费博览会将于4月13扭亏为盈,蔡振华为何卸任足协?背后有何缘由文丨体娱新视线编辑丨体娱新视线前言中国体坛的今年迎来了风云多变的一年,前有中国足球掀起反贪风暴,后有中国篮协与新疆队发生诸多危机。随后还有女篮主力球员的丑闻事件,这些事件背后暗潮汹楚汉棋王李来群携冠军之势棋行天下(三)9月2日下午一时三十分,挑战赛在北京兆龙饭店揭开了战幕。此次棋王赛设有奖金,获胜者为3000元,败者为1500元。赛前,李来群乐呵呵地对胡荣华说这样吧,胡老师,我要是输了,我那15腾讯股份比例是怎样的?易店无忧认为腾讯南非MIH持股近34腾讯创业初期,IDG和盈科数码分别向腾讯投资220万美元,各占腾讯20股份,马化腾及其团队持股60。此后,南非MIH集团从盈科数码和腾讯创始人团在人生最低谷最无助被人看不起的时候,你是怎么熬过来的?多年前,我儿子28周因胎盘早博早产,出生时才1斤2量,重症脑瘫心脏病肺透明病先天性青光眼等等11项重症,医生都说救活了后可能智力或者肢体功能有问题,让我们慎重考虑。老公生意失败被朋长大有出息的孩子,小时候是什么样的?我隔壁王叔家有两孙子,现在一个在做大老板,家产上亿,一个是清华大学生。一提这两个孩子,王叔满脸的皱纹瞬间就舒展开了,满脸的自豪,但你要提起他们小时侯,那只能用过街老鼠人人喊打来形容
阿迪达斯寻找椰子鞋代替品连续几日,上海市武康路的阿迪达斯Samba快闪店前早早排起了长队。球鞋二道贩子小辉捏着刚取到的号站在中间望着龟速前进的队伍。我是95号,还得等一会儿,没那么快的。没了yeezy,阿越南美女太惊艳!倾国倾城!奥黛是越南国服越语里ao指遮盖到颈部以下的服饰而dai的意思是长与旗袍一样也是展现女子身形婀娜的传统服饰奥黛源于旗袍上衣是一件长衫,类似中国旗袍胸袖剪裁非常合身突显女性玲珑有致的曲四肢瘦,肚子大,怎么搭配?四肢瘦,肚子大,穿衣搭配重在扬长避短,平时搭配要重点把肚子遮住,同时体现四肢。诸如,一宽松上衣搭配阔腿裤是不错的选择二宽松上衣搭配短裤或短裙可以扬长避短三宽松连衣裙可以达到遮挡肚子过膝马甲怎么搭配好看?马甲是比较帅气的搭配单品,搭配衬衫西裤是最帅的,毕竟都是属于正装系列,尽管过膝的马甲属于休闲了,但依然挡不住它帅气的颜值。然而马甲搭配衬衫就太普通了,也比较束缚,既然是内搭,那么不娱乐圈水有多深?成龙今天一天报了两次娱乐圈水很深,黑幕深,没有背累和靠山的千万别进去,免得把小命搭进去了,例如乔任梁就是一个例子,明明是遭亡恶魔残酷虐杀的,恶势力硬用钱抹平成一个抑郁自杀的,那就是上海滩的几个版本哪个版本留给我们的记忆最深刻?周润发饰许文强,吕良伟饰丁力,赵雅芝饰冯程程,经典从未被超越!四个版本,印象深刻的当然是周润发赵雅芝吕良伟主演的第一个版本,其余都是模仿,没法超越。特别是周润发的表演就像本色出演,macOSBigSur11。7。5(20G1225)正式版发布ISOPKGDMGIPSW下载2023年3月27日(北京时间28日凌晨),macOSVentura13。3正式版发布,本更新包括全新表情符号以及针对Mac的其他增强功能错误修复和安全性更新。同时发布了macOSvivoS16亮相松美术馆艺术展演绎机圈色彩新潮流手机中国新闻2023年3月11日至4月16日,vivoS16系列颜如玉以及以之为灵感创作的潮流艺术品,在北京松美术馆流动的本能艺术展展出。与此同时,vivoS16春日悠蓝全新配色也严重可能导致上眼睑下垂!就算全切双眼皮简单,也要找靠谱的医生全切双眼皮手术真的可能会导致上眼睑下垂!!!虽然这种情况并不常见,但如果碰到了,可就麻烦了。全切双眼皮后的眼睑下垂,可能与手术技术术后护理个体差异等因素有关。但医生的技术,绝对是其解决争执后,海莉比伯喜欢赛琳娜戈麦斯性感的比基尼泳装赛琳娜戈麦斯(SelenaGomez)分享了一张穿着比基尼的复古照片,海莉比伯(HaileyBieber)点了赞。不能把她的喜欢留给自己。周日,30岁的赛琳娜戈麦斯(SelenaG有哪些老歌曲值得你回忆?经常想起小时候唱的东方红,太阳升,中国出了个毛泽东,还有大海航行靠舵手,干革命靠的是毛泽东思想,现在经常回忆这两首歌。没事就唱一唱。毛泽东时代的老歌一字不改的值得回忆,改了就没有回
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网