1.場景
有事務的情況下,記錄將異常資訊記錄到異常表中
2.處理過程
2.1本來是加上never或者notsurport註解,然後在throw拋異常之前把異常資訊插入資料庫,但是未成功,拋異常時回滾
2.2finally中呼叫被@async註解的方法
2.3注意 這個帶@async註解的方法要放在其他的類裡邊
呼叫**
public object loghandler(proceedingjoinpoint proceedingjoinpoint) throws throwable .{}】 開始!入參是【{}】", methoddeclaringclass, methodname,targetmethodparams);
//異常記錄表
pf1013 pf1013 = new pf1013();
try catch (exception exception) .{}】 入參是【{}】,操作人是【{}】",methoddeclaringclass, methodname,targetmethodparams,globalvarvalueutil.getopercode());
pf1013.seterrorinfo(exceptionutils.getstacktrace(exception).substring(0,8000));
throw exception;
} finally .{}】 結束,耗時:{}ms, 請求引數【{}】", methoddeclaringclass, methodname,system.currenttimemillis()-starttime,targetmethodparams);}}
async註解**
@component
@slf4j
public class asynchelper }}
奇怪的是,沒有配置configuration也沒有在啟動類中@enableasync就好用了,眼睜睜看到丟擲異常之後我的異常表裡邊就有資料了
續集來了
以上操作之後 本地確實是好用的 但是 線上確實是不好用的
所以 使用@async還是有注意事項的
1.非同步方法和呼叫非同步方法的方法不能再同乙個類
2.非同步方法加註解@async,呼叫非同步方法的方法所在類要加註解@enableasync
3.方法所屬的類的物件需要是被spring容器所管理的,也就是指被@controller @service @repository @component這些註解的類
修改方法 在上邊第一段**loghandler方法所在類上邊開啟非同步
因為loghandler是呼叫@async方法的類
後續
protected static threadlocalstack, object>> contextualdata = new threadlocalstack();
非同步想獲得執行結果,需要將被@async註解的方法改為future返回,使用asyncresult
/**
* 引數分類表發布到指定城市
* @param pb207
* @param cityid
*/@datasourcekey(spel = "#cityid")
@async
public futurepublishpb207(pb207 pb207, string cityid)
return new asyncresult<>(boolean.valueof(true));//指定城市是否存在引數分類資料
}
非同步阻塞
首先,同步非同步,阻塞非阻塞,是兩個概念
futureexits = publishutil.publishpb207(pb207, publishcityid);//返回指定城市是否存在引數分類資料
//4.通過pb207的yjywflbm和ejywflbm,分別查詢pb205一級業務分類表和pb206二級業務分類表,如果指定城市有資料就不發布,沒資料就發布
boolean aboolean = exits.get();
if(!aboolean){}
之前之所以用非同步,是因為要進入同事寫的攔截方法,又不知道如何開啟新事物
現在想起來,其實只要用@transactional(propagation= propagation.requires_new)開啟新事物,就不用future.get了
@transactional(propagation= propagation.requires_new)
PLAY2 6 SCALA 六 非同步處理結果
play是乙個自底向上的非同步框架,play處理所有的request都是非同步 非阻塞的。預設的方式是使用非同步的controller。換句話說,contrller中的應用 需要避免阻塞,i.e.不能等待某乙個操作。場景的阻塞操作有jdbc呼叫 streaming api http請求和耗時計算。雖...
Curator 非同步獲取結果
原聲的zookeeper 的crud api有同步和非同步之分,對於非同步api,需要傳遞asynccallback 對於getdata,getchildren,exists這三個api,還可以設定watcher。這些功能在curator中是如何實現的?在curator中,可以通過如下三種方式來非同...
非同步處理日誌
把所有的info日誌,採用非同步模式來處理 環境日誌檔案的io阻塞 public class logtask implements runnable override public void run catch exception e public static void loginfo strin...