涓€闃舵鎻愪氦锛圔estEfforts1PC锛?/strong>鐤戦棶锛?/span>鍋囧涓€涓@Transactional娉ㄨВ鐨勬柟娉曚腑濡備笅鏂规硶鏁版嵁婧?.updatexxxx鏁版嵁婧?.updateyyyy鏁版嵁"/>

鍒嗗竷寮忎簨鍔?浜?

Posted 杩樻槸閭d釜寰愪笢寮?/a>

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鍒嗗竷寮忎簨鍔?浜?相关的知识,希望对你有一定的参考价值。



濂借鎬т笉濡傜儌绗斿ご锛屾兂璧锋潵馃憜锛屼箣鍓嶇殑鐤戦棶鏉ュ洖绛斾笅锛岄『渚匡紝璁板綍涓嬪疄闄呮渚嬪垎甯冨紡浜嬪姟瑙e喅鏂规銆?span class="mq-2">


涓€闃舵鎻愪氦锛圔est Efforts 1PC锛?/strong>

鐤戦棶锛?/span>

鍋囧涓€涓@Transactional娉ㄨВ鐨勬柟娉曚腑濡備笅鏂规硶

鏁版嵁婧?.updatexxxx

鏁版嵁婧?.updateyyyy

鏁版嵁婧?.updatezzzz

瀹為檯缁撴灉锛屽綋浠g爜鎵ц鍒?鏁版嵁婧?.updateyyyy浼氭姤寮傚父锛屾暟鎹簮閫夋嫨閿欒銆?/span>


涓轰粈涔堜細鏈夎繖绉嶇粨鏋滃憿锛?/span>

涓€鏃﹀紑鍚簡浜嬪姟浠ュ悗锛孌ataSourceTransactionManager涓細鎶?/span>

key=dataSource瀹炰緥瀵硅薄,value=ConnectionHolder,

鎵斿埌 ThreadLocal<Map<Object, Object>> resources

鍚屾椂SqlSessionTemplate鐨凷qlSessionInterceptor鎷︽埅鍣ㄧ殑getSqlSession浼氭妸 

key=sessionFactory瀹炰緥, value=SqlSessionHolder 鎵斿埌 resources涓€?/span>


鐢变簬鎴戜滑浣跨敤鐨勬槸鍔ㄦ€佹暟鎹簮锛宒atasouce灏辨槸dynamicDataSource涓€涓疄渚嬶紝spring鍜宮ybatis鏁村悎浠ュ悗锛宻qlSessionFactory娉ㄥ叆鍔ㄦ€佹暟鎹簮,sqlSessionFactory涔熸槸涓€涓疄渚嬨€?/span>


鍦ㄦ墽琛屽畬 鏁版嵁婧?.updatexxx 涔嬪悗锛宺esources涓凡缁忕紦瀛樹簡ConnecitonHolder鍜孲qlSessionHolder锛屾墽琛屾暟鎹簮2.updateyyyy鐨勬椂鍊欙紝鍗充娇 鏍规嵁鏂规硶鍚嶉噸鏂版寚瀹氫簡鏁版嵁婧愶紝涔熸棤娴庝簬浜嬨€?/span>

鍥犱负 鍔ㄦ€佹暟鎹簮鐨?getConnection 鍘嬫牴涓嶄細鎵ц鍒般€傜湅濡備笅浠g爜锛岀洿鎺ヤ粠resources鑾峰彇鍒颁簡杩炴帴銆傜湅涓嬮潰鐨?9琛屼唬鐮侊紝鐩存帴閫氳繃106琛岃繑鍥烇紝鍘嬫牴涓嶄細鎵ц鍔ㄦ€佹暟鎹簮鐨?11琛屻€?/span>

閴翠簬姝わ紝浣滀负涓€绉嶈В鍐崇殑鏂规硶锛岃涓嶅悓鐨勬暟鎹簮鐨刣ataSource鍒嗗埆鏄笉鍚岀殑瀵硅薄锛宻qlSessionFactory涔熸槸濡傛銆傛瘮濡備笅闈㈣繖鏍风殑閰嶇疆銆?/span>

骞朵笖锛岄噸鍐橠ynamicSqlSessionTemplate锛屾牴鎹畉hreadlocal閫夊畾鐨剆qlSesssionFactory瀹炰緥key,鏉ュ垏鎹qlSessionTemplate銆傚疄闄呰瘉鏄庡彲琛屻€?/span>


浜嬪姟琛ュ伩(绾夸笂绯荤粺浣跨敤涓殑)

澶т綋鐨勪吉浠g爜濡備笅锛?/span>

@DistributedTrans

public void order(){

try{

鍑忓簱瀛?);

浣跨敤浼樻儬鍒?);

浣跨敤绾㈠寘();

}catch(Exception e){

浜嬪姟鍗忚皟鍣?rollback();

}

}

@琛ュ伩鐨勬敞瑙?/span>

public void 鍑忓簱瀛?){

dosomething;

}

// 鍑忓簱瀛樼殑rollback涓氬姟浠g爜

public void compensate(){

}

@琛ュ伩鐨勬敞瑙?/span>

public void 浣跨敤浼樻儬鍒?){

dosomething;

}

// 浣跨敤浼樻儬鍒哥殑rollback涓氬姟浠g爜

public void compensate(){

}

@琛ュ伩鐨勬敞瑙?/span>

public void 浣跨敤绾㈠寘(){

dosomething();

}

// 浣跨敤绾㈠寘鐨剅ollback涓氬姟浠g爜

public void compensate(){

}


鍐欎竴涓垏闈紝鎷︽埅娉ㄨВ@DistributedTrans锛屽湪begin鐨勬椂鍊欙紝鍦═hreadLocal<LinkedHashMap<String,String>> steps涓璼et涓€涓┖鐨凩inkedHashMap銆?/span>

鎷︽埅娉ㄨВ @琛ュ伩鐨勬敞瑙o紝灏唊ey=className, value=params鐨刯son 鎵斿埌steps涓€?/span>

涓€鏃︿笂闈㈢殑step1,step2,step3涓湁浠绘剰涓€姝ラ澶辫触锛屽垯 浜嬪姟鍗忚皟鍣?rollback();

浜嬪姟鍗忚皟鍣?rollback();鍋氫簡浠€涔堬紵

閬嶅巻steps,閫氳繃mq鍙戞秷鎭紝娑堟伅浣撲腑鍖呭惈浜?琛ュ伩className&params锛宼opic涓甫涓婃湇鍔$殑鍏抽敭瀛楋紝闃叉浜ゅ弶娑堣垂锛屾病鏈夎绫绘柟娉曪紝鍙嶅皠澶辫触銆?/span>

娑堣垂鑰咃紝鏍规嵁娑堟伅浣撲腑鐨刢lassName&params锛屽弽灏勬墽琛?compensate鏂规硶銆?/span>

鏂规硶鐨勬渶鍚巗teps涓€瀹歳emove锛岄槻姝㈠唴瀛樻硠婕忋€?/span>

灏辨槸鎰熻锛岃ˉ鍋跨殑涓氬姟鏂规硶鏈夌偣閲嶃€?/span>


以上是关于鍒嗗竷寮忎簨鍔?浜?的主要内容,如果未能解决你的问题,请参考以下文章

鍒嗗竷寮忎簨鍔$殑BASE鐞嗚

鍒嗗竷寮忎簨鍔′箣濡備綍鍩轰簬RocketMQ鐨勪簨鍔℃秷鎭壒鎬у疄鐜板垎甯冨紡绯荤粺鐨勬渶缁堜竴鑷存€э紵

鍒嗗竷寮忎腑鐨勪竴鑷存€х畻娉曚箣Raft绠楁硶

浜窐椤圭洰Day01馃毄鈽呪槄鈽咅煉?

鍒嗗竷寮忕紦瀛樺涔犳€荤粨

redis setnx 鍒嗗竷寮忛攣