浣滆€咃細灏忓倕鍗氬锛歨ttps://bugstack.cn1.鍓嶈█鎴戜滑涓嶄竴鏍凤紝鍙湁浣犳槸瀵规墜锛佹病閿欙紝浣犲氨鏄繃绋嬪紡缂栫▼锛佸氨鍍忔垜璇寸殑锛岀粷澶у鏁癱oder閮借瑕佹眰娌℃棩娌″鍦版唻鐫€浠g爜锛屽啀椹檸涔熸病鏈夐噸鏋勭殑鍙兘锛屽彧鏈夐噸鍐欍€備负浠€涔堬紵鍥犱负閲嶅啓鐨勬椂闂存垚鏈繙姣旈噸鏋勪竴娈靛凡缁忕儌鎺夌殑浠g爜鐪佹椂銆備絾鏄皝涔熶笉鑳戒繚璇侀噸鍐欏悗鐨勪唬鐮佷細姣斾互鍓嶅ソ寰堝锛岃繕瑕佹壙鎷呴噸鍐欏悗浠g爜浜嬫晠鐨勯闄╁拰闅句互浣撶幇鐨勫晢涓氫环鍊硷紒浠g爜铏界劧鏄粰鏈哄櫒璺戠殑锛屼絾涔熸槸缁欎汉鐪嬬殑锛岄殢鐫€闇€姹傜殑姣忎竴娆¤凯浠c€佸彉鏇淬€佸崌绾э紝閮介渶瑕佺爺鍙戜汉鍛樺娆″紑鍙戝拰涓婄嚎鍚屾牱鐨勪唬鐮侊紝鎵€浠ヨ繖浼氭秹鍙婂埌鍙淮鎶ゆ€х殑鐗圭偣銆佹槗鎵╁銆佹槗浜ゆ帴銆傝€屼唬鐮侀€昏緫鍒嗗眰涓嶅悎鐞嗭紝涓嶅啓浠g爜娉ㄩ噴锛屼笉鎸夎鑼冩彁浜わ紝涓嶆牸寮忓寲銆佷贡鍛藉悕鐢氳嚦鎶妐ueryBatch鍐欐垚queryBitch锛岄兘浼氶€犳垚鍚庣画浠g爜鏃犳硶閲嶆瀯鐨勯棶棰?閭f垜浠氨鍒嗗埆浠嬬粛涓€涓嬶紝濡備綍寮€鍙戝彲閲嶆瀯鐨勪唬鐮侊紒2.浠g爜浼樺寲1.绾﹀畾瑙勮寖#鎻愪氦锛歁aintypefeat锛氭坊鍔犳柊鐗规€ix锛氫慨澶峛ug#鎻愪氦锛歋pecialtypedocs锛氬彧鏇存敼涓庢枃妗f牱寮忕浉鍏崇殑鍐呭锛氫笉褰卞搷浠g爜鍚箟鐨勬洿鏀癸紝濡俽emovingspacesandchangingindentation,addordeletesemicolonsbuild:鏀瑰彉鏋勫缓宸ュ叿鎴栧閮ㄤ緷璧栵紝濡倃ebpack,npmrefactor:閲嶆瀯浠g爜鏃朵娇鐢╮evert:鎵цgitrevert鎵撳嵃鐨勬秷鎭?submit:鏆傛椂涓嶈浣跨敤typetest:娣诲姞testsormodifyexistingtestsperf:Changestoimproveperformanceci:ChangesrelatedtoCI(continuousintegrationservice)chore:涓嶈淇敼src鎴栬€呭叾浠杢est鐨勪慨鏀癸紝姣斿build杩囩▼鎴栬€呰緟鍔╁伐鍏风殑鏀瑰彉#Annotation:绫绘敞瑙i厤缃?***@description:*@author:${USER}*@date:${DATE}*/branch:寮€鍙戝墠绾﹀畾鍒嗘敮鐨勮鑼冿紝姣斿date_user_purpose,210905_xfg_updateRuleLogicsubmission:author,type:desc涔嬬被as:浠樺厔,fix:鏇存柊瑙勫垯閫昏緫闂锛屽弬鑰僀ommit娑堟伅瑙勮寖娉ㄨВ锛氬寘鎷被娉ㄨВ銆佹柟娉曟敞瑙c€佸睘鎬ф敞瑙c€傚湪IDEA涓紝鍙互璁剧疆绫绘敞瑙g殑澶撮儴淇℃伅銆侲ditor->FileandCodeTemplates->FileHeader寤鸿涓嬭浇瀹夎IDEAP3C鎻掍欢AlibabaJavaCodingGuidelines锛岀粺涓€瑙勮寖缂栫爜鏂瑰紡銆?.鎺ュ彛鏍囧噯缂栧啓RPC鎺ュ彛鏃讹紝杩斿洖缁撴灉蹇呴』鍖呭惈鏄庣‘鐨凜ode浠g爜鍜孖nfo鎻忚堪锛屽惁鍒欑敤鎴峰緢闅剧煡閬撴帴鍙h皟鐢ㄦ垚鍔熻繕鏄紓甯革紝寮傚父鏄粈涔堛€傚畾涔塕esultpublicclassResultimplementsjava.io.Serializable{privatestaticfinallongserialVersionUID=752386055478765987L;/**杩斿洖缁撴灉鐮?/privateStringcode;/**杩斿洖缁撴灉淇℃伅*/privateStringinfo;publicResult(){}publicResult(Stringcode,Stringinfo){this.code=code;this.info=淇℃伅锛泒publicstaticResultbuildSuccessResult(){缁撴灉result=newResult();缁撴灉.setCode(Constants.ResponseCode.SUCCESS.getCode());result.setInfo(Constants.ResponseCode.SUCCESS.getInfo());杩斿洖缁撴灉锛泒//...get/set}杩斿洖缁撴灉鍖咃細缁ф壙publicclassRuleResultextendsResult{privateStringruleId;绉佹湁瀛楃涓茶鍒欐弿杩帮紱publicRuleResult(Stringcode,Stringinfo){super(code,info);}//...get/set}//浣跨敤publicRuleResultexecRule(DecisionMatterrequest){returnnewRuleResult(Constants.ResponseCode.SUCCESS.getCode(),Constants.ResponseCode.SUCCESS.getInfo());}杩斿洖缁撴灉鍖呰锛歡enericpublicclassResultDataimplementsSerializable{privateResultresult;绉佹湁T鏁版嵁锛沺ublicResultData(Resultresult,Tdata){this.result=result;杩欎釜銆傛暟鎹?鏁版嵁锛泒//...get/set}//浣跨敤publicResultDataexecRule(DecisionMatterrequest){returnnewResultData(Result.buildSuccessResult(),newRule());}涓や釜鎺ュ彛鐨勫皝瑁呭畾涔夎繑鍥炵殑缁撴灉鍙互鏍囧噯鍖栥€傝繑鍥炵粨鏋滅粡杩囪繖绉嶆柟寮忓皝瑁呭悗锛岀敤鎴峰彲浠ョ粺涓€鍒ゆ柇Code浠g爜锛屽苟杩涜鐩稿簲鐨勫鐞嗐€?銆佹暟鎹簱琛ㄨ璁$殑涓夊ぇ鑼冨紡锛氭槸鏁版嵁搴撶殑瑙勮寖鍐呭銆傛墍璋撴暟鎹簱鐨勪笁澶ц寖寮忥紝娉涙寚璁捐鏁版嵁搴撹〃鏃跺簲閬靛惊鐨勪竴濂楄鑼冦€傚鏋滀笉閬靛畧锛岃璁$殑鏁版嵁搴撳氨浼氫笉瑙勫垯锛屼細鍑虹幇鏁版嵁搴撳瓧娈点€傚啑浣欍€佹暟鎹煡璇€佹彃鍏ョ瓑鎿嶄綔銆傛暟鎹簱涓嶄粎鏈変笁绉嶈寖寮忥紙1NF/2NF/3NF锛夛紝杩樻湁BCNF銆?NF銆?NF鈥︹€︿絾鏄紝鍦ㄥ疄闄呯殑鏁版嵁搴撹璁′腑锛岄伒瀹堝墠涓夌鑼冨紡灏辫冻澶熶簡銆傚啀寰€涓嬩細瀵艰嚧璁捐鐨勬暟鎹簱浜х敓澶涓嶅繀瑕佺殑绾︽潫銆?NF闆惰寖寮忔槸鎸囦笉浣跨敤鑼冨紡锛屾暟鎹互澶ч噺鍐椾綑鐨勮〃瀛楁瀛樺偍锛岃繖鏍风殑琛ㄧ粨鏋勯潪甯搁毦缁存姢銆?NF鐨勭涓€鑼冨紡鏄闆惰寖寮忓啑浣欏煙鐨勬敼杩涖€傚皢閲嶅鐨勫瓧娈垫娊鍙栧嚭鏉ワ紝璁捐鍑哄啑浣欐暟鎹皯銆佹槗浜庡瓨鍌ㄥ拰璇诲彇鐨勮〃缁撴瀯銆傚悓鏃讹紝绗竴鑼冨紡涔熸寚鍑猴紝琛ㄤ腑鐨勬墍鏈夊瓧娈甸兘搴旇鏄師瀛愮殑銆佷笉鍙垎鍓茬殑銆備緥濡傦紝涓嶈兘灏嗗叕鍙稿憳宸ヨ〃鐨勯儴闂ㄥ悕绉板拰鑱岃矗瀛樺偍鍦ㄤ竴涓瓧娈典腑銆傛湁蹇呰纭繚姣忎竴鍒楅兘淇濇寔鍘熷瓙鎬с€?NF婊¤冻1NF鍚庯紝琛ㄤ腑鐨勫垪蹇呴』渚濊禆浜庝富閿紝淇濊瘉姣忎竴鍒楅兘涓庝富閿垪鐩歌繛锛屼絾涓嶈兘闂存帴鐩歌繛锛屽嵆涓€寮犺〃鍙兘鎻忚堪涓€浠朵簨銆?闇€瑕佺‘淇濊〃涓殑姣忎竴鍒楅兘涓庝富閿浉鍏炽€?NF涓嶈兘鏈変緷璧栧叧绯汇€備粠瀛﹀彿銆佸鍚嶏紝鍒伴櫌绯汇€侀櫌绯诲埌瀹胯垗锛岃淇濊瘉姣忎竴鍒楅兘涓庝富閿垪鐩存帴鍏宠仈锛屼笉鑳介棿鎺ュ叧鑱斻€傚弽涓夎寖寮忎笁绉嶈寖寮忔槸璁捐鏁版嵁搴撹〃缁撴瀯鐨勮鍒欏拰绾︽潫锛屼絾鍦ㄥ疄闄呭紑鍙戜腑鍏佽鏈夐儴鍒嗙伒娲绘€э細鏈夋椂涓轰簡鏌ヨ鏂逛究锛岀敤鎴峰綋鏃剁殑蹇収淇℃伅浼氬湪鏁版嵁搴撹〃涓嚭鐜板啑浣欍€傝鍗曡〃锛屾瘮濡傜敤鎴蜂笅鍗曟椂鐨勪竴浜涜缃俊鎭€傚崟鍒楀垪琛ㄦ暟鎹湪鎬昏〃涓眹鎬绘垚涓€涓暟閲忓€硷紝鍙互閬垮厤鏌ヨ鏃剁殑鍒楄〃姹囨€绘搷浣溿€傚湪璁捐琛ㄦ牸鏃跺彲浠ュ皢涓€浜涘瓧娈靛啑浣欙紝閬垮厤鍥犱笟鍔″彂灞曞彉鍖栵紝鑰冭檻涓嶅懆鑰屽鑷磋〃鏍肩箒鐞愮殑闂銆?.绠楁硶閫昏緫鍦ㄦ垜浠疄闄呯殑涓氬姟鍔熻兘閫昏緫寮€鍙戜腑锛屼负浜嗘弧瓒充竴浜涢珮骞跺彂鐨勫満鏅紝涓嶅彲鑳介€氳繃閿佸簱琛ㄦ潵鎵e簱瀛橈紝涔熶笉鍙兘鐩存帴for寰幆澶ч噺鐨勮疆璁搷浣滐紝閫氬父闇€瑕佽€冭檻馃鍦ㄨ繖绉嶅満鏅笅濡備綍鍘讳腑蹇冨寲鍜岄檷浣庢椂闂村鏉傚害銆傜鏉€锛氬幓涓績鍖栬儗鏅細鏈鍟嗗搧娲诲姩绉掓潃鐨勫疄鐜版柟妗堟渶鍒濊璁′负鍩轰簬娲诲姩鍙稩D杩涜閿佸畾锛屽湪绉掓潃鏃堕攣瀹氾紝鐢ㄦ埛璐拱瀹屾垚鍚庨噴鏀俱€備絾鏄紝褰撳ぇ閲忕敤鎴锋姠璐椂锛岀鏉€鍒嗗竷寮忔帓浠栭攣鍚庣殑涓氬姟閫昏緫澶勭悊鍑虹幇寮傚父锛屾湭鑳介噴鏀鹃攣銆傝繖鏍蜂竴鏉ワ紝鎵€鏈夌殑鐢ㄦ埛閮芥棤娉曞啀鎷垮埌閿侊紝涔熷氨閫犳垚浜嗘湁璐т笉鑳戒笅鍗曠殑闂銆備紭鍖栵細浼樺寲鎺掍粬绔炰簤鏉′欢涓哄垎娈甸潤鎬侊紝浣跨敤娲诲姩ID+搴撳瓨鍙蜂綔涓哄姩鎬侀攣鏍囪瘑銆傚鏋滃綋鍓嶇鏉€鐢ㄦ埛閿佸畾澶辫触锛屽悗缁敤鎴峰彲浠ョ户缁鏉€锛屼笉鍙楀奖鍝嶃€傚嚭鐜版晠闅滅殑閿佷細鐢卞伐浣滀汉鍛樿繘琛岃ˉ鍋垮拰鍥炴敹锛屾渶缁堥伩鍏嶅嚭鐜伴攣瓒呭崠鍜屽崠涓嶅嚭鍘荤殑鎯呭喌銆傜畻娉曪細鍚﹀畾鏁欑涔Testpublicvoidtest_idx_hashMap(){Mapmap=newHashMap<>(64);map.put("濂ュ皵寰峰凹","鏈嶅姟鏈疄鏂?);map.put("浜害","鏈嶅姟鏈疄鐜?);map.put("chorology","鏈嶅姟鏈疄鐜?);map.put("carline","鏈嶅姟鏈疄鐜?);map.put("姘熶腑姣?,"鏈嶅姟鏈疄鐜?);map.put("angora","InsititiousService");map.put("insititious","Insititious鏈嶅姟");map.put("涓嶇湡璇?,"涓嶇湡璇氭湇鍔?);longstartTime=System.currentTimeMillis();for(inti=0;i<100000000;i++){map.get("涓嶇湡璇?);}System.out.println("Time-consuming(initialCapacity):"+(System.currentTimeMillis()-startTime));}鑳屾櫙锛欻ashMap鏁版嵁鑾峰彇鐨勬椂闂村鏉傚害涓篛(1)->O(logn)->O(n)锛屼絾鏄粡杩囩壒娈婅繍绠楋紝杩欎釜鏃堕棿澶嶆潅搴﹀彲浠ユ媺鍒癘(n)杩愮畻锛氳繖涓嚱鏁板畾涔変簡HashMap鏉ュ瓨鍌ㄤ笟鍔″疄鐜発ey锛岄€氳繃key璋冪敤鏈嶅姟銆備絾鏄繖閲岀殑key鍙insincere鏈夌敤锛屽叾浠栭兘鏄湭瀹炵幇鐨勬湇鍔°€傞偅涔堜綘鐪嬪埌鍝噷鍑轰簡闂鍚楋紵杩欐浠g爜涔嶄竴鐪嬫病浠€涔堥棶棰橈紝浣嗗鏋滀綘鐞嗚В浜嗭紝閭e氨鏄唬鐮佷腑鐨勭爳闇滐紒瀹冪殑鐩殑鍙湁涓€涓紝灏辨槸鎶婃墍鏈夌殑key鍋氭垚涓€涓摼琛ㄦ斁鍒癏ashMap涓紝鎶婃湁鐢ㄧ殑key鏀惧湪閾捐〃鐨勫熬閮紝澧炲姞get鐨勮€楁椂锛侀鍏堬紝newHashMap<>(64)锛涗负浠€涔堥粯璁ゅ垵濮嬪寲64涓暱搴︼紵鍥犱负榛樿闀垮害涓?锛屾墍浠ュ湪鎻掑叆鍏冪礌鏃讹紝褰撻摼琛ㄩ暱搴︿负8鏃讹紝浼氳繘琛屾墿瀹瑰拰閾捐〃鏍戝垽鏂紝姝ゆ椂浼氬鍘焝ey杩涜鍝堝笇澶勭悊锛屾墍鏈塳ey鏃犳硶缁勬垚涓€涓椂闂村鏉傚害楂樼殑閾捐〃銆傚叾娆★紝鎵€鏈夌殑key閮芥槸鏈夋剰閫夋嫨鐨勶紝鍥犱负浠栦滑鍦℉ashMap涓绠椾笅鏍囨椂锛屼笅鏍囧€间负0锛宨dx=(size-1)&(key.hashCode()^(key.hashCode()>>>16))锛岃繖鏍锋墍鏈夌殑閿兘鍙互鏁e垪鍒扮浉鍚岀殑浣嶇疆杩涜纰版挒銆備笉鐪熻瘹杩欎釜璇嶇殑鎰忔€濇槸锛涗笉鐪熻瘹锛屼笉鐪熻瘹锛佹渶鍚庯紝鍓?涓敭鍏跺疄鏄棤鐢ㄩ敭锛屾病鏈変换浣曚綔鐢紝鍙湁鏈€鍚庝竴涓敭鏈夋湇鍔°€傝繖鏍凤紝鍦℉ashMap涓氨鍙互寤虹珛寰堝杩欐牱鑰楁椂鐨勭鎾為摼琛ㄤ簡銆傚綋鐒跺繀椤绘弧瓒?.75鐨勮礋杞界巼锛孒ashMap涓嶈鎵╁銆傚叾瀹炲緢澶氱畻娉曞寘鎷細hashing銆乮nversion銆乴oad绛夛紝鍙互鐢ㄥ湪寰堝瀹為檯鐨勪笟鍔″満鏅腑锛屽寘鎷細浜虹兢杩囨护銆佹娊濂栭€昏緫銆佹暟鎹矾鐢辩瓑銆備娇鐢ㄨ繖浜涘姛鑳藉彲浠ラ檷浣庢椂闂村鏉傚害锛屾彁楂樼郴缁熺殑鎬ц兘鍜屽噺灏戠晫闈㈠搷搴旀椂闂淬€?.鑱岃矗鍒嗙涓轰簡璁╃▼搴忕殑閫昏緫瀹炵幇鏇村叿鍙墿灞曟€э紝鎴戜滑閫氬父闇€瑕佷娇鐢ㄨ璁℃ā寮忔潵澶勭悊鍚勪釜鍦烘櫙鐨勪唬鐮佸疄鐜扮粨鏋勩€傝璁℃ā寮忓湪浠g爜寮€鍙戜腑鐨勮繍鐢ㄤ富瑕佷綋鐜板湪鎺ュ彛鐨勫畾涔夈€佹娊璞$被鐨勫皝瑁呭拰缁ф壙绫荤殑瀹炵幇涓娿€傝繖鏍峰氨闅旂浜嗗悇涓姛鑳藉尯鐨勫紑鍙戯紝淇濊瘉姣忔闇€姹傛墿灞曠殑鏃跺€欙紝鍙互鏇村姞鐏垫椿鐨勬坊鍔狅紝涓嶈嚦浜庡洜涓洪渶姹傜殑杩唬锛屼唬鐮佸彉寰楁洿鍔犳贩涔便€侰asepublicinterfaceIRuleExec{voiddoRuleExec(Stringreq);}publicclassRuleConfig{protectedMapconfigGroup=newConcurrentHashMap<>();static{//...}}publicclassRuleDataSupportextendsRuleConfig{protectedStringqueryRuleConfig(StringruleId){杩斿洖鈥渪xx鈥濓紱}}publicabstractclassAbstractRuleBaseextendsRuleDataSupportimplementsIRuleExec{@OverridepublicvoiddoRuleExec(Stringreq){//1.鏌ヨ閰嶇疆StringruleConfig=super.queryRuleConfig("10001");//2.楠岃瘉淇℃伅checkRuleConfig(ruleConfig);//3.鎵ц瑙勫垯{鍖呮嫭涓氬姟閫昏緫锛屼氦缁欎笟鍔″鐞唥this.doLogic(configGroup.get(ruleConfig));}/***鎵ц瑙勫垯{鍖呮嫭涓氬姟閫昏緫锛屼氦缁欎笟鍔″鐞唥*/protectedabstractvoiddoLogic(Stringreq);privatevoidcheckRuleConfig(StringruleConfig){//...妫€鏌ラ厤缃畗}publicclassRuleExecextendsAbstractRuleBase{@OverrideprotectedvoiddoLogic(Stringreq){//灏佽鑷繁鐨勪笟鍔¢€昏緫}}绫诲浘杩欐槸涓€涓ā鏉挎ā寮忕粨鏋勭殑瀹氫箟锛屽畠浣跨敤鎺ュ彛瀹炵幇鍜屾娊璞$被缁ф壙銆傚悓鏃跺彲浠ョ湅鍒板湪AbstractRuleBase鎶借薄绫讳腑锛屽畠璐熻矗瀹屾垚鏁翠釜閫昏緫璋冪敤鐨勫畾涔夛紝骞朵笖杩欎釜鎶借薄绫诲皢涓€浜涢€氱敤鐨勯厤缃拰鏁版嵁浣跨敤鍗曠嫭闅旂锛屽皢甯哥敤鐨勭畝鍗曟柟娉曟斁鍒板畠鐨勮嚜宸辩殑瀹炴柦銆傛渶鍚庢槸鎶借薄鏂规硶鐨勫畾涔夊拰璋冪敤锛屼笟鍔$被RuleExec鍙互鏍规嵁闇€瑕佸疄鐜拌嚜宸辩殑閫昏緫鍔熻兘銆?.閫昏緫缂滃瘑浣犵殑浠g爜鏈夋病鏈夊嚭杩囩嚎涓婁簨鏁咃紵涓轰粈涔堜細鍙戠敓浜嬫晠锛熸槸涓嶆槸鏍戜笂鏈夊崄鍙笩鎵撲竴鏋繕鍓╁灏戝彧楦熺殑闂锛熶緥濡傦細鏋搷浜嗗悧锛岄笩鍎胯亱浜嗗悧锛屾湁娌℃湁鎬€瀛曠殑锛屾湁娌℃湁缁戝湪鏍戜笂鐨勯笩鍎匡紝鏃佽竟鏍戜笂鏈夋病鏈夐笩鍎匡紝楦熷効鎬曟灙澹板悧锛屾湁娈嬬柧鐨勯笩鍎垮悧锛屾湁鐚庨笩鑰呭悧锛熶汉鐨勭溂鐫涙槸妯$硦鐨勶紝...鍏跺疄浣犵殑绾夸笂浜嬫晠鍩烘湰閮芥槸鍥寸粫鐫€锛氭暟鎹簱杩炴帴鍜屾煡璇㈡參銆佹湇鍔″櫒璐熻浇鍜屽畷鏈恒€侀€昏緫瑕嗙洊寮傚父銆佹帴鍙e箓绛夈€佹暟鎹弽閲嶃€丮Q娑堣垂閫熷害銆丷PC鍝嶅簲鏃堕棿銆佸伐鍏蜂娇鐢ㄩ敊璇瓑銆備妇涓緥瀛愶細鐢ㄦ埛澶氫粯浜嗙偣鏁帮紝瀵艰嚧澶ч噺瀹㈡埛鎶曡瘔銆傝儗鏅細璇ヤ骇鍝佸姛鑳界殑鑳屾櫙鍙兘鍙備笌浜嗗緢澶т竴閮ㄥ垎鐨勭爺鍙戙€傜畝鍗曟潵璇达紝灏辨槸婊¤冻鐢ㄦ埛浣跨敤绉垎鎶藉鐨勯渶姹傘€備笂鍥惧乏渚ф槸鐮斿彂鍒濇湡鐨勮璁℃祦绋嬨€傞€氳繃RPC鎺ュ彛鎵i櫎鐢ㄦ埛绉垎锛屾墸闄ゆ垚鍔熷悗杩涜鎶藉銆備絾鏄敱浜庡綋澶㏑PC鏈嶅姟涓嶇ǔ瀹氾紝瀹為檯RPC璋冪敤鎴愬姛锛屼絾鏄繑鍥炶秴鏃跺け璐ャ€傛瘡娆¤皟鐢≧PC鎺ュ彛鐨剈uid閮芥槸鑷姩鐢熸垚鐨勶紝涓嶅叿澶囪皟鐢ㄧ殑骞傜瓑鎬с€傚洜姝わ紝閫犳垚浜嗙敤鎴风Н鍒嗗浠樼殑鐜拌薄銆傝В鍐虫柟妗堬細淇敼浜嬫晠鍚庣殑寮€濂栨祦绋嬶紝鍏堢敓鎴愯寮€濂栫殑褰╃エ锛屼粠褰╃エID璋冪敤RPC鎺ュ彛锛屼繚璇佹帴鍙g殑骞傜瓑鎬с€傚綋RPC鎺ュ彛澶辨晥鏃讹紝閫氳繃瀹氭椂浠诲姟琛ュ伩鐨勬柟寮忚繘琛屾娊濂栥€傛祦绋嬫暣鏀瑰悗锛屽彂鐜拌ˉ鍋夸换鍔℃瘡鍛ㄥ嚭鐜?-3娆★紝璇佹槑RPC鎺ュ彛纭疄瀛樺湪鍙敤鎬ч棶棰橈紝涔熻鏄庡緢鏃╀互鍓嶅氨鏈夋祦绋嬮棶棰橈紝浣嗘槸鐜板湪娌℃湁鍙嶉锛屽洜涓哄緢灏戞湁瀹㈡埛鎶曡瘔銆?.棰嗗煙鑱氬悎涓嶅鎶借薄锛屼笉鑳界‖缂栫爜锛屼笉鏄撴墿灞曘€傚畠鎬绘槸浣犵殑浠g爜鍚楋紵杩涘幓鍚с€備负浠€涔堬紝鍥犱负寰堝鐮斿彂鍐欑殑浠g爜閮戒笉鍏峰鍩熻仛鍚堢殑鐗规€с€傚綋鐒讹紝杩欎笉涓€瀹氶潪瑕佸湪DDD鐨勭粨鏋勪笅銆傜敋鑷冲湪MVC鐨勫垎灞備腑锛屼篃鍙互鍐欏嚭寰堝涓嶉敊鐨勮仛鍚堥€昏緫銆?灏嗗姛鑳藉疄鐜颁笌涓氬姟璋冪敤鍒嗗紑銆備緷鎵橀鍩熼┍鍔ㄨ璁$殑璁捐鎬濇兂锛岄€氳繃浜嬩欢椋庢毚寤虹珛棰嗗煙妯″瀷锛屽悎鐞嗗垝鍒嗛鍩熺殑閫昏緫鍜岀墿鐞嗚竟鐣岋紝寤虹珛棰嗗煙瀵硅薄鍜屾湇鍔$煩闃靛強鏈嶅姟鏋舵瀯鍥撅紝浠g爜瀹氫箟绗﹀悎DDD鍒嗗眰鏋舵瀯鎬濇兂鐨勭粨鏋勬ā鍨嬶紝淇濊瘉涓氬姟妯″瀷涓嶤odeModelConsistency涓€鑷淬€傞€氳繃浠ヤ笂璁捐鎬濊矾銆佹柟娉曞拰娴佺▼锛屾寚瀵煎洟闃熸寜鐓DD璁捐鎬濊矾瀹屾垚寰湇鍔$殑璁捐鍜屽紑鍙戙€傛嫆缁濇偿鐞冨皬鍗曚綋锛屾嫆缁濇薄鏌撳姛鑳藉拰鏈嶅姟锛屾嫆缁濅竴鍔犱竴涓湀杩涘害鐨勫姛鑳斤紝鏋勫缓楂樺彲鐢ㄣ€佹槗閫傞厤鐨勪簰鑱旂綉楂橀€熻凯浠c€傚簲鐢ㄦ湇鍔℃槸鐗╁寲鐨勩€佺粍瑁呯殑銆佸彲缂栫▼鐨勬湇鍔★紝浠ユ彁楂樹汉鐨勬晥鐜?.鏈嶅姟鍒嗗眰濡傛灉浣犳兂璁╀綘鐨勭郴缁熷伐绋嬩唬鐮佹敮鎸佺粷澶ч儴鍒嗙殑涓氬姟闇€姹傦紝绉疮鍙互浣跨敤鐨勫姛鑳斤紝閭d箞鍩烘湰涓婁綘闇€瑕佸垎绂绘妧鏈粍浠跺拰鍔熻兘鍖哄湪鍋氫唬鐮佸紑鍙戝拰瀹炵幇鐨勬椂鍊欏浜庝笟鍔¢€昏緫绛夊嚑涓眰锛屼笉瑕佹妸棰戠箒鍙樺寲鐨勪笟鍔¢€昏緫鍐欏埌姣忎釜鍔熻兘鍖猴紝鑰屾槸璁╁姛鑳藉尯鏇村姞鐙珛锛屽彲浠ョ敱涓氬姟灞傛潵杩炴帴銆佺紪鎺掋€佺粍鍚堝疄鐜颁笉鍚岀殑涓氬姟闇€姹傘€傝繖鏍锋墠鑳借浣犵殑鍔熻兘鍩熼€愭笎娌夋穩锛屾瘡娆¢渶瑕佺殑鏃跺€欐墿灞曡捣鏉ヤ篃鏇村鏄撱€傝繖鏄竴涓畝鍖栫殑鍒嗗眰閫昏緫缁撴瀯锛岃仛鍚堜簡鍩熴€丼DK缁勪欢銆佷腑闂翠欢鍜屼唬鐮佺紪鎺掞紝骞舵彁渚涚敱涓€浜涢€氱敤鍏辨€ф祿缂╃殑鏈嶅姟娌荤悊鍔熻兘銆傞€氳繃杩欐牱鐨勫垎灞傚拰灞傚眰钀藉疄锛屽彲浠ユ洿鍔犵伒娲荤殑鎵挎帴闇€姹傘€?.骞跺彂浼樺寲鍦ㄥ垎甯冨紡鍦烘櫙寮€鍙戠郴缁熶腑锛屽敖閲忎娇鐢ㄥ垎甯冨紡鐨勮兘鍔涳紝涓€浜涢泦涓殑銆佸垎甯冨紡鐨勪笢瑗匡紝浠ュ強鏁版嵁搴撻攣瀹氾紝浠庣▼搴忚璁′笂灏介噺閬垮厤锛屽洜涓鸿繖浜涙柟寮忕殑浣跨敤鏄湪鏌愪簺鏋佺鎯呭喌涓嬶紝绯荤粺鐨勮礋杞藉彲鑳戒細瓒呮爣锛屼粠鑰屽紩鍙戜簨鏁呫€傛墍浠ヤ竴鑸儏鍐典笅锛屾洿闇€瑕佸仛涓績鍖栧鐞嗭紝浣跨敤MQ娑堝嘲锛岄檷浣庤€﹀悎锛岃鏁版嵁鏈€缁堜竴鑷达紝鍚屾椂涔熼渶瑕佽€冭檻浣跨敤Redis鍑忓皯澶ч噺閿佸湪鏁版嵁搴撲笂澶勭悊銆傚悎鐞嗕娇鐢∕Q銆丷PC銆佸垎甯冨紡浠诲姟銆丷edis銆佸垎搴撳垎琛ㄣ€佸垎甯冨紡浜嬪姟銆傚彧鏈夎繖鏍风殑鎿嶄綔锛屾墠鑳借浣犵殑绋嬪簭浠g爜鏀寔鏇村ぇ鐨勪笟鍔¢噺銆?0.婧愮爜鑳藉姏浣犱簡瑙h繃HashMap鐨勬媺閾惧鍧€鏁版嵁缁撴瀯鍚楋紝浣犱簡瑙e搱甯屽嚱鏁板拰鎵板姩鍑芥暟鍚楋紝浣犵煡閬撳浣曠粨鍚圫pring鍔ㄦ€佸垏鎹㈡暟鎹簮锛孉OP鏄浣曞疄鐜板拰浣跨敤鐨勶紝MyBatis鏄浣曞疄鐜扮殑缁撳悎SpringCombining娴佹帶Bean瀵硅薄绛夈€傜湅璧锋潵閮芥槸闈㈣瘯鐨勫叓鑲℃枃锛屼絾鏄湪瀹為檯寮€鍙戜腑锛屽緢澶氶棶棰橀兘鍙互瑙e喅銆侤Around("aopPoint()&&@annotation(dbRouter)")publicObjectdoRouter(ProceedingJoinPointjp,DBRouterdbRouter)throwsThrowable{StringdbKey=dbRouter.key();if(StringUtils.isBlank(dbKey))thrownewRuntimeException("annotationDBRouterkeyisnull!");//璁$畻璺敱StringdbKeyAttr=getAttrValue(dbKey,jp.getArgs());intsize=dbRouterConfig.getDbCount()*dbRouterConfig.getTbCount();//骞叉壈鍑芥暟intidx=(size-1)&(dbKeyAttr.hashCode()^(dbKeyAttr.hashCode()>>>16));//搴撹〃绱㈠紩intdbIdx=idx/dbRouterConfig.getTbCount()+1;inttbIdx=idx-dbRouterConfig.getTbCount()*(dbIdx-1);//璁剧疆涓篢hreadLocalDBContextHolder.setDBKey(String.format("%02d",dbIdx));DBContextHolder.setTBKey(String.format("%02d",tbIdx));logger.info("鏁版嵁搴撹矾鐢辨柟娉曪細{}dbIdx:{}tbIdx:{}",getMethod(jp).getName(),dbIdx,tbIdx);//杩斿洖缁撴灉try{returnjp.proceed();}鏈€鍚巤DBContextHolder.clearDBKey();DBContextHolder.clearTBKey();}}杩欐槸HashMap鍝堝笇妗舵暟缁?閾捐〃+绾㈤粦鏍戠殑鏁版嵁缁撴瀯锛岄€氳繃鎵板姩鍑芥暟(size-1)&(key.hashCode()^(key.hashCode()>>>16));瑙e喅浜嗕弗閲嶇殑鏁版嵁鍐茬獊闂锛屼絾鍏跺疄杩欐牱鐨勫搱甯岀畻娉曞拰瀵诲潃鏂瑰紡鏄彲浠ュ簲鐢ㄥ埌鏁版嵁搴撹矾鐢辩殑璁捐鍜屽疄鐜颁腑鐨勶紝鑰屾暣涓暟缁?閾捐〃鐨勬柟寮忓叾瀹炲氨鏄竴涓簱+琛ㄦ柟寮忋€傛暟鎹簱璺敱绠€鍖栫殑鏍稿績閫昏緫瀹炵幇浠g爜濡備笂銆傞鍏堟垜浠彁鍙栧嚭鏁版嵁搴撹〃绉殑涓暟锛屼綔涓哄拰HashMap涓€鏍风殑闀垮害浣跨敤銆俰dx鍦ㄦ€婚暱涓婅绠楀嚭涓€涓储寮曚綅缃悗锛岄渶瑕佸皢杩欎釜浣嶇疆杞崲鍒板簱琛ㄤ腑锛岀湅鐪嬫€婚暱鐨勭储寮曡惤鍦ㄥ摢涓簱锛屽摢涓〃銆傛渶鍚庡皢璁$畻鍑虹殑绱㈠紩淇℃伅瀛樺偍鍦═hreadLocal涓紝鐢ㄤ簬浼犻€掓柟娉曡皟鐢ㄦ椂鍙互鎻愬彇鐨勭储寮曚俊鎭€?.缁间笂鎵€杩帮紝璁查亾鐞嗭紝浣犳兂閫氳繃閲嶆瀯娓呯悊涓€鍫嗙儌浠g爜鍑犱箮鏄笉鍙兘鐨勩€傚叿浣撴潵璇达紝闇€瑕佹敼鍙樹唬鐮佺粨鏋勭殑鍒嗗眰銆佸睘鎬у璞$殑闆嗘垚銆佽皟鐢ㄩ€昏緫鐨勫皝瑁咃紝浣嗘搷浣滅殑浠讳綍涓€姝ラ兘鍙兘瀵瑰師鏈夌殑鎺ュ彛瀹氫箟鍜岃皟鐢紝浠ュ強鐜版湁鐨勫閮ㄦ帴鍙d骇鐢熼闄╁奖鍝嶃€傝皟鐢ㄤ綘鐨勬帴鍙d粛鐒堕渶瑕侀殢鐫€浣犵殑鍙樺寲鍗囩骇锛屼綘鍙兘浼氭兂鍒板皝瑁呬竴灞傦紝浣嗘槸杩欎竴灞傚皝瑁呬粛鐒堕渶瑕佸ぇ閲忕殑鏃堕棿鎴愭湰鍜屽嚑涔庢病鏈変环鍊肩殑閫傞厤銆傛墍浠ュ湪鎴戜滑瀹為檯鐨勫紑鍙戜腑锛屽鏋滆兘澶熼噸鏋勮繖浜涗唬鐮侊紝閭e嚑涔庡氨鏄疄鏃堕噸鏋勩€傛瘡褰撲綘娣诲姞鏂板姛鑳姐€佹柊閫昏緫鎴栦慨澶嶅紓甯告椂锛屼綘蹇呴』鑰冭檻鏄惁鍙互閫氳繃浠g爜缁撴瀯銆佸疄鐜版柟娉曘€佽璁℃ā寮忕瓑鎵嬫鏉ユ敼鍙樹笉鍚堢悊鐨勫姛鑳藉疄鐜般€傛瘡涓€娆★紝涓€鐐圭偣鐨勪紭鍖栧拰鏀瑰彉锛屽氨涓嶄細閭d箞闅句簡銆傚綋浣犲湪鎺ュ埌闇€姹傜殑鏃跺€欙紝浠旂粏鎯虫兂浣犻渶瑕佹瀯寤轰粈涔堟牱鐨勬暟鎹粨鏋勩€佺畻娉曢€昏緫銆佽璁℃ā寮忋€侀鍩熻仛鍚堛€佹湇鍔$紪鎺掋€佺郴缁熸灦鏋勭瓑鏉ユ壙鎺ヨ繖鏍风殑涓氬姟闇€姹傦紝鎵嶈兘鏋勫缓鍑轰竴涓洿鍚堢悊鏄撶敤鐨勫彲缁存姢銆佸彲鎵╁睍鐨勭郴缁熸湇鍔°€傚鏋滀綘瀵硅繖浜涙病鏈夋劅瑙夛紝浣犲彲浠ョ湅涓€涓嬭璁℃ā寮忓拰鎵嬪啓Spring锛屽彲浠ュ府鍔╀綘鎻愬崌寰堝缂栫▼閫昏緫璁捐銆?.绯诲垪鎺ㄨ崘鎶辫崏锛屼綘灞呯劧缁欎唬鐮佷笅姣掍簡锛佷竴涓猚odereview宸偣娌¤繃璇曠敤鏈燂紒璋佽鏄庡ぉ涓婄嚎锛岃繖瀹朵紮鏍规湰涓嶇煡閬撳紑鍙戣繃绋嬶紒涓绘寔椤圭洰銆奃DD + RPC 寮€鍙戝垎甯冨紡鏋舵瀯锛屾娊濂栫郴缁熴€嬬爺绌剁敤浜庣郴缁熺洃鎺ц璁′笌瀹炵幇鐨勫瓧鑺傜爜妫€娴嬫妧鏈?/p>