



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第springboot利用aop實現(xiàn)接口異步(進度條)的全過程在項目中發(fā)現(xiàn)有接口(excel導(dǎo)入數(shù)據(jù))處理數(shù)據(jù)需要耗時比較長的時間,是因為數(shù)據(jù)量比較大,同時數(shù)據(jù)的校驗需要耗費一定時間,決定使用一種通用的方法解決這個問題。
解決方案:通過aop使接口異步處理,前端輪詢另外一個接口查詢進度。
目標:
1接口上一個注解即可實現(xiàn)接口異步(優(yōu)化:可以通過header參數(shù)動態(tài)控制是否異步)
2一個方法實現(xiàn)進度條的更新
二、時序圖
三、功能演示
四、關(guān)鍵代碼
Controller
@EnableAsync是自已定義注解更新緩存進度asyncService.updatePercent(per);
@EnableAsync
@RequestMapping(value=test,method=RequestMethod.POST)
@ApiOperation(value=接口測試)
@ApiImplicitParams({
@ApiImplicitParam(name=num,value=數(shù)字,required=true,dataType=int,paramType=query,defaultValue=1)
publicObjectdemo(Integernum)throwsInterruptedException{
for(inti=0;ii++){
Thread.sleep(1000);
//計算百分比
Stringper=BigDecimal.valueOf(i).divide(BigDecimal.valueOf(15),2,RoundingMode.HALF_DOWN).toString();
//更新redis緩存進度
asyncService.updatePercent(per);
Integerb=100;
returnResult.success(String.format(線程變量值:%s,100除以%s的結(jié)果是%s,RequestHolder.get(),num,b/num));
}
AsyncAop
importcn.hutool.core.util.IdUtil;
importmon.Result;
importmon.pojo.RequestHolder;
importcom.asyf.demo.service.AsyncService;
importlombok.extern.slf4j.Slf4j;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.Around;
importorg.aspectj.lang.annotation.Aspect;
importorg.aspectj.lang.annotation.Pointcut;
importorg.aspectj.lang.reflect.MethodSignature;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importorg.springframework.web.context.request.RequestContextHolder;
importorg.springframework.web.context.request.ServletRequestAttributes;
importjavax.servlet.http.HttpServletRequest;
@Aspect
@Component
@Slf4j
publicclassAsyncAop{
@Autowired
privateAsyncServiceasyncService;
@Pointcut(@annotation(mon.aop.EnableAsync))
publicvoidcostTimePointCut(){
@Around(costTimePointCut())
publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{
longbeginTime=System.currentTimeMillis();
//請求header
ServletRequestAttributesservletRequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequestrequest=servletRequestAttributes.getRequest();
RequestHolder.set(request.getHeader(dateFormat));
//異步消息
Stringid=IdUtil.simpleUUID();
AsyncMsgasyncMsg=newAsyncMsg();
asyncMsg.setId(id);
//異步返回值
Objectresult=Result.success(asyncMsg);
StringrequestHolder=RequestHolder.get();
//異步執(zhí)行
asyncService.async(requestHolder
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 攝影團隊領(lǐng)導(dǎo)力培養(yǎng)-洞察及研究
- 物聯(lián)網(wǎng)電視生態(tài)-洞察及研究
- 災(zāi)難恢復(fù)成本測算-洞察及研究
- 腦電信號解碼-洞察及研究
- 跨境旅游電商策略-洞察及研究
- 2025版網(wǎng)店店員電子商務(wù)聘用合同范本
- 二零二五年度股份低值轉(zhuǎn)讓與公司戰(zhàn)略布局協(xié)議
- 2025版航空貨物出口運輸合同示范文本
- 二零二五年度數(shù)據(jù)中心機房裝修與數(shù)據(jù)中心智能監(jiān)控系統(tǒng)合同范本
- 2025果園的承包合同范本
- 2025重慶對外建設(shè)集團招聘41人筆試參考題庫附答案解析
- 高警示藥品風(fēng)險管理
- 2025南方航空“夢起航”航務(wù)聯(lián)合培養(yǎng)招聘筆試歷年參考題庫附帶答案詳解
- 精選芭蕾舞男女演員之間的潛規(guī)則匯總
- 慢阻肺隨訪記錄表格模板
- J-STD-020D[1].1中文版
- SF∕T 0124-2021 錄像過程分析技術(shù)規(guī)范
- 四講業(yè)主業(yè)主大會業(yè)主委員會PPT課件
- 永磁渦流傳動器的應(yīng)用示范及產(chǎn)業(yè)化20150706
- 被執(zhí)行人財產(chǎn)申報表
- 復(fù)合活性羥基磷灰石陶瓷的研制及其生物相容性研究
評論
0/150
提交評論