Spring 澹版槑寮忎簨鍔¤鎴戜滑浠庡鏉傜殑浜嬪姟澶勭悊涓緱鍒拌В鑴便備嬌寰楁垜浠啀涔熸棤闇瑕佸幓澶勭悊鑾峰緱榪炴帴銆佸叧闂繛鎺ャ佷簨鍔℃彁浜ゅ拰鍥炴粴絳夎繖浜涙搷浣溿傚啀涔熸棤闇瑕佹垜浠湪涓庝簨鍔$浉鍏崇殑鏂規硶涓鐞嗗ぇ閲忕殑 try… catch … finally 浠g爜銆?/span> 鎴戜滑鍦ㄤ嬌鐢?/span> Spring 澹版槑寮忎簨鍔℃椂錛屾湁涓涓潪甯擱噸瑕佺殑姒傚康灝辨槸浜嬪姟灞炴с備簨鍔″睘鎬ч氬父鐢變簨鍔$殑浼犳挱琛屼負錛屼簨鍔$殑闅旂綰у埆錛屼簨鍔$殑瓚呮椂鍊煎拰浜嬪姟鍙鏍囧織緇勬垚銆傛垜浠湪榪涜浜嬪姟鍒掑垎鏃訛紝闇瑕佽繘琛屼簨鍔″畾涔夛紝涔熷氨鏄厤緗簨鍔$殑灞炴с?/span>
Spring 鍦?/span> TransactionDefinition 鎺ュ彛涓畾涔夎繖浜涘睘鎬?/span> , 浠ヤ緵 PlatfromTransactionManager 浣跨敤 , PlatfromTransactionManager 鏄?/span> spring 浜嬪姟綆$悊鐨勬牳蹇冩帴鍙c?/span>
l getTimeout() 鏂規硶錛屽畠榪斿洖浜嬪姟蹇呴』鍦ㄥ灝戠鍐呭畬鎴愩?/span>
l isReadOnly() , 浜嬪姟鏄惁鍙錛屼簨鍔$鐞嗗櫒鑳藉鏍規嵁榪欎釜榪斿洖鍊艱繘琛屼紭鍖栵紝紜繚浜嬪姟鏄彧璇葷殑銆?/span>
l getIsolationLevel() 鏂規硶榪斿洖浜嬪姟鐨勯殧紱葷駭鍒紝浜嬪姟綆$悊鍣ㄦ牴鎹畠鏉ユ帶鍒跺彟澶栦竴涓簨鍔″彲浠ョ湅鍒版湰浜嬪姟鍐呯殑鍝簺鏁版嵁銆?/span>
鍦?/span> TransactionDefinition 鎺ュ彛涓畾涔変簡浜斾釜涓嶅悓鐨勪簨鍔¢殧紱葷駭鍒細
l ISOLATION_DEFAULT 榪欐槸涓涓?/span> PlatfromTransactionManager 榛樿鐨勯殧紱葷駭鍒紝浣跨敤鏁版嵁搴撻粯璁ょ殑浜嬪姟闅旂綰у埆 . 鍙﹀鍥涗釜涓?/span> JDBC 鐨勯殧紱葷駭鍒浉瀵瑰簲
l ISOLATION_READ_UNCOMMITTED 榪欐槸浜嬪姟鏈浣庣殑闅旂綰у埆錛屽畠鍏呰鍒涓涓簨鍔″彲浠ョ湅鍒拌繖涓簨鍔℃湭鎻愪氦鐨勬暟鎹傝繖縐嶉殧紱葷駭鍒細浜х敓鑴忚錛屼笉鍙噸澶嶈鍜屽夠鍍忚銆?/span> 渚嬪 : Mary鐨勫師宸ヨ祫涓?/span> 1000, 璐㈠姟浜哄憳灝?/span> Mary 鐨勫伐璧勬敼涓轟簡 8000 錛屼絾鏈彁浜や簨鍔?/span> 涓庢鍚屾椂錛?/span> Mary姝e湪璇誨彇鑷繁鐨勫伐璧?/span> Mary 鍙戠幇鑷繁鐨勫伐璧勫彉涓轟簡 8000 錛屾澶╁枩鍦幫紒 鑰岃儲鍔″彂鐜版搷浣滄湁璇紝鑰屽洖婊氫簡浜嬪姟 ,Mary 鐨勫伐璧勫張鍙樹負浜?/span> 1000. 鍍忚繖鏍?/span> ,Mary 璁板彇鐨勫伐璧勬暟 8000 鏄竴涓剰鏁版嵁銆?/span>
l ISOLATION_READ_COMMITTED 淇濊瘉涓涓簨鍔′慨鏀圭殑鏁版嵁鎻愪氦鍚庢墠鑳借鍙﹀涓涓簨鍔¤鍙栥傚彟澶栦竴涓簨鍔′笉鑳借鍙栬浜嬪姟鏈彁浜ょ殑鏁版嵁銆傝繖縐嶄簨鍔¢殧紱葷駭鍒彲浠ラ伩鍏嶈剰璇誨嚭鐜幫紝浣嗘槸鍙兘浼氬嚭鐜頒笉鍙噸澶嶈鍜屽夠鍍忚銆?/span>
l ISOLATION_REPEATABLE_READ 榪欑浜嬪姟闅旂綰у埆鍙互闃叉鑴忚錛屼笉鍙噸澶嶈銆備絾鏄彲鑳藉嚭鐜板夠鍍忚銆傚畠闄や簡淇濊瘉涓涓簨鍔′笉鑳借鍙栧彟涓涓簨鍔℃湭鎻愪氦鐨勬暟鎹錛岃繕淇濊瘉浜嗛伩鍏嶄笅闈㈢殑鎯呭喌浜х敓 ( 涓嶅彲閲嶅璇?/span> ) 銆?/span> 鍦ㄤ簨鍔?/span> 1 涓紝 Mary 璇誨彇浜嗚嚜宸辯殑宸ヨ祫涓?/span> 1000, 鎿嶄綔騫舵病鏈夊畬鎴?/span> 鍦ㄤ簨鍔?/span> 2 涓紝榪欐椂璐㈠姟浜哄憳淇敼浜?/span> Mary 鐨勫伐璧勪負 2000, 騫舵彁浜や簡浜嬪姟 . 鍦ㄤ簨鍔?/span> 1 涓紝Mary 鍐嶆璇誨彇鑷繁鐨勫伐璧勬椂錛屽伐璧勫彉涓轟簡 2000 鍦ㄤ竴涓簨鍔′腑鍓嶅悗涓ゆ璇誨彇鐨勭粨鏋滃茍涓嶈嚧錛屽鑷翠簡涓嶅彲閲嶅璇匯?/span> 浣跨敤 ISOLATION_REPEATABLE_READ 鍙互閬垮厤榪欑鎯呭喌鍙戠敓銆?/span>
l ISOLATION_SERIALIZABLE 榪欐槸鑺辮垂鏈楂樹唬浠蜂絾鏄渶鍙潬鐨勪簨鍔¢殧紱葷駭鍒備簨鍔¤澶勭悊涓洪『搴忔墽琛屻傞櫎浜嗛槻姝㈣剰璇伙紝涓嶅彲閲嶅璇誨錛岃繕閬垮厤浜嗗夠鍍忚銆?/span> 鐩墠宸ヨ祫涓?/span> 1000 鐨勫憳宸ユ湁 10浜恒?/span> 浜嬪姟 1, 璇誨彇鎵鏈夊伐璧勪負 1000 鐨勫憳宸ャ?/span> 鍏辮鍙?/span> 10 鏉¤褰?/span> 榪欐椂鍙︿竴涓簨鍔″悜 employee琛ㄦ彃鍏ヤ簡涓鏉″憳宸ヨ褰曪紝宸ヨ祫涔熶負 1000 浜嬪姟 1 鍐嶆璇誨彇鎵鏈夊伐璧勪負 1000 鐨勫憳宸?/span> 鍏辮鍙栧埌浜?/span> 11 鏉¤褰曪紝榪欏氨浜х敓浜嗗夠鍍忚銆?/span> ISOLATION_SERIALIZABLE 鑳介伩鍏嶈繖鏍風殑鎯呭喌鍙戠敓銆備絾鏄繖鏍蜂篃鑰楄垂浜嗘渶澶х殑璧勬簮銆?/span>
getPropagationBehavior () 榪斿洖浜嬪姟鐨勪紶鎾涓猴紝鐢辨槸鍚︽湁涓涓椿鍔ㄧ殑浜嬪姟鏉ュ喅瀹氫竴涓簨鍔¤皟鐢ㄣ?/span> 鍦?/span> TransactionDefinition 鎺ュ彛涓畾涔変簡涓冧釜浜嬪姟浼犳挱琛屼負錛?/span>
l PROPAGATION_REQUIRED 濡傛灉瀛樺湪涓涓簨鍔★紝鍒欐敮鎸佸綋鍓嶄簨鍔°傚鏋滄病鏈変簨鍔″垯寮鍚竴涓柊鐨勪簨鍔°?/span> 浣跨敤 spring 澹版槑寮忎簨鍔★紝 spring 浣跨敤 AOP 鏉ユ敮鎸佸0鏄庡紡浜嬪姟錛屼細鏍規嵁浜嬪姟灞炴э紝鑷姩鍦ㄦ柟娉曡皟鐢ㄤ箣鍓嶅喅瀹氭槸鍚﹀紑鍚竴涓簨鍔★紝騫跺湪鏂規硶鎵ц涔嬪悗鍐沖畾浜嬪姟鎻愪氦鎴栧洖婊氫簨鍔°?/span> 鍗曠嫭璋冪敤 methodB 鏂規硶 鐩稿綋浜?/span> Spring 淇濊瘉鍦?/span> methodB 鏂規硶涓墍鏈夌殑璋冪敤閮借幏寰楀埌涓涓浉鍚岀殑榪炴帴銆傚湪璋冪敤 methodB 鏃訛紝娌℃湁涓涓瓨鍦ㄧ殑浜嬪姟錛屾墍浠ヨ幏寰椾竴涓柊鐨勮繛鎺ワ紝寮鍚簡涓涓柊鐨勪簨鍔°?/span> 鍗曠嫭璋冪敤 MethodA 鏃訛紝鍦?/span> MethodA 鍐呭張浼氳皟鐢?/span> MethodB. 鎵ц鏁堟灉鐩稿綋浜?/span> 璋冪敤 MethodA 鏃訛紝鐜涓病鏈変簨鍔★紝鎵浠ュ紑鍚竴涓柊鐨勪簨鍔?/span> . 褰撳湪 MethodA 涓皟鐢?/span>MethodB 鏃訛紝鐜涓凡緇忔湁浜嗕竴涓簨鍔★紝鎵浠?/span> methodB 灝卞姞鍏ュ綋鍓嶄簨鍔°?/span>
l PROPAGATION_SUPPORTS 濡傛灉瀛樺湪涓涓簨鍔★紝鏀寔褰撳墠浜嬪姟銆傚鏋滄病鏈変簨鍔★紝鍒欓潪浜嬪姟鐨勬墽琛屻備絾鏄浜庝簨鍔″悓姝ョ殑浜嬪姟綆$悊鍣紝 PROPAGATION_SUPPORTS 涓庝笉浣跨敤浜嬪姟鏈夊皯璁鎬笉鍚屻?/span> 鍗曠函鐨勮皟鐢?/span> methodB 鏃訛紝 methodB 鏂規硶鏄潪浜嬪姟鐨勬墽琛岀殑銆?/span> 褰撹皟鐢?/span> methdA鏃?/span> ,methodB 鍒欏姞鍏ヤ簡 methodA 鐨勪簨鍔′腑 , 浜嬪姟鍦版墽琛屻?/span>
l PROPAGATION_MANDATORY 濡傛灉宸茬粡瀛樺湪涓涓簨鍔★紝鏀寔褰撳墠浜嬪姟銆傚鏋滄病鏈変竴涓椿鍔ㄧ殑浜嬪姟錛屽垯鎶涘嚭寮傚父銆?/span> 褰撳崟鐙皟鐢?/span> methodB 鏃訛紝鍥犱負褰撳墠娌℃湁涓涓椿鍔ㄧ殑浜嬪姟錛屽垯浼氭姏鍑哄紓甯?/span> throw new IllegalTransactionStateException("Transaction propagation ''mandatory'' but no existing transaction found"); 褰撹皟鐢?/span> methodA 鏃訛紝 methodB 鍒欏姞鍏ュ埌 methodA 鐨勪簨鍔′腑錛屼簨鍔″湴鎵ц銆?/span>
l PROPAGATION_REQUIRES_NEW 鎬繪槸寮鍚竴涓柊鐨勪簨鍔°傚鏋滀竴涓簨鍔″凡緇忓瓨鍦紝鍒欏皢榪欎釜瀛樺湪鐨勪簨鍔℃寕璧楓?/span> 褰撳崟鐙皟鐢?/span> methodB 鏃訛紝鐩稿綋浜庢妸 methodb 澹版槑涓?/span> REQUIRED 銆傚紑鍚竴涓柊鐨勪簨鍔★紝浜嬪姟鍦版墽琛屻?/span> 褰撹皟鐢?/span> methodA 鏃?/span> 鎯呭喌鏈変簺澶т笉涓鏍?/span> . 鐩稿綋浜庝笅闈㈢殑鏁堟灉銆?/span> 鍦ㄨ繖閲岋紝鎴戞妸 ts1 縐頒負澶栧眰浜嬪姟錛?/span> ts2 縐頒負鍐呭眰浜嬪姟銆備粠涓婇潰鐨勪唬鐮佸彲浠ョ湅鍑猴紝 ts2 涓?/span>ts1 鏄袱涓嫭绔嬬殑浜嬪姟錛屼簰涓嶇浉騫層?/span> Ts2 鏄惁鎴愬姛騫朵笉渚濊禆浜?/span> ts1 銆傚鏋?/span> methodA 鏂規硶鍦ㄨ皟鐢?/span> methodB 鏂規硶鍚庣殑 doSomeThingB 鏂規硶澶辮觸浜嗭紝鑰?/span> methodB 鏂規硶鎵鍋氱殑緇撴灉渚濈劧琚彁浜ゃ傝岄櫎浜?/span> methodB 涔嬪鐨勫叾瀹冧唬鐮佸鑷寸殑緇撴灉鍗磋鍥炴粴浜嗐?/span> 浣跨敤PROPAGATION_REQUIRES_NEW, 闇瑕佷嬌鐢?/span> JtaTransactionManager 浣滀負浜嬪姟綆$悊鍣ㄣ?/span>
l PROPAGATION_NOT_SUPPORTED 鎬繪槸闈炰簨鍔″湴鎵ц錛屽茍鎸傝搗浠諱綍瀛樺湪鐨勪簨鍔°?/span> 褰撳崟鐙皟鐢?/span> methodB 鏃訛紝涓嶅惎鐢ㄤ換浣曚簨鍔℃満鍒訛紝闈炰簨鍔″湴鎵ц銆?/span> 褰撹皟鐢?/span> methodA 鏃訛紝鐩稿綋浜庝笅闈㈢殑鏁堟灉 浣跨敤 PROPAGATION_NOT_SUPPORTED, 涔熼渶瑕佷嬌鐢?/span> JtaTransactionManager 浣滀負浜嬪姟綆$悊鍣ㄣ?/span>
l PROPAGATION_NEVER 鎬繪槸闈炰簨鍔″湴鎵ц錛屽鏋滃瓨鍦ㄤ竴涓椿鍔ㄤ簨鍔★紝鍒欐姏鍑哄紓甯?/span> 鍗曠嫭璋冪敤methodB 錛屽垯闈炰簨鍔$殑鎵ц銆?/span> 璋冪敤 methodA 鍒欎細鎶涘嚭寮傚父
l PROPAGATION_NESTED 濡傛灉涓涓椿鍔ㄧ殑浜嬪姟瀛樺湪錛屽垯榪愯鍦ㄤ竴涓祵濂楃殑浜嬪姟涓?/span> . 濡傛灉娌℃湁媧誨姩浜嬪姟 , 鍒欐寜 TransactionDefinition.PROPAGATION_REQUIRED 灞炴ф墽琛?/span> 榪欐槸涓涓祵濂椾簨鍔?/span> , 浣跨敤 JDBC 3.0 椹卞姩鏃?/span> , 浠呬粎鏀寔 DataSourceTransactionManager 浣滀負浜嬪姟綆$悊鍣ㄣ傞渶瑕?/span> JDBC 椹卞姩鐨?/span> java.sql.Savepoint 綾匯傛湁涓浜?/span> JTA 鐨勪簨鍔$鐞嗗櫒瀹炵幇鍙兘涔熸彁渚涗簡鍚屾牱鐨勫姛鑳姐?/span> 浣跨敤 PROPAGATION_NESTED 錛岃繕闇瑕佹妸 PlatformTransactionManager 鐨?/span>nestedTransactionAllowed 灞炴ц涓?/span> true; 鑰?/span> nestedTransactionAllowed 灞炴у奸粯璁や負false; 濡傛灉鍗曠嫭璋冪敤 methodB 鏂規硶錛屽垯鎸?/span> REQUIRED 灞炴ф墽琛屻?/span> 濡傛灉璋冪敤 methodA 鏂規硶錛岀浉褰撲簬涓嬮潰鐨勬晥鏋?/span> 褰?/span> methodB 鏂規硶璋冪敤涔嬪墠錛岃皟鐢?/span> setSavepoint 鏂規硶錛屼繚瀛樺綋鍓嶇殑鐘舵佸埌 savepoint 銆傚鏋?/span> methodB 鏂規硶璋冪敤澶辮觸錛屽垯鎭㈠鍒頒箣鍓嶄繚瀛樼殑鐘舵併備絾鏄渶瑕佹敞鎰忕殑鏄紝榪欐椂鐨勪簨鍔″茍娌℃湁榪涜鎻愪氦錛屽鏋滃悗緇殑浠g爜 (doSomeThingB() 鏂規硶 ) 璋冪敤澶辮觸錛屽垯鍥炴粴鍖呮嫭 methodB 鏂規硶鐨勬墍鏈夋搷浣溿?/span> 宓屽浜嬪姟涓涓潪甯擱噸瑕佺殑姒傚康灝辨槸鍐呭眰浜嬪姟渚濊禆浜庡灞備簨鍔°傚灞備簨鍔″け璐ユ椂錛屼細鍥炴粴鍐呭眰浜嬪姟鎵鍋氱殑鍔ㄤ綔銆傝屽唴灞備簨鍔℃搷浣滃け璐ュ茍涓嶄細寮曡搗澶栧眰浜嬪姟鐨勫洖婊氥?/span>
PROPAGATION_NESTED 涓?/span> PROPAGATION_REQUIRES_NEW 鐨勫尯鍒細
瀹冧滑闈炲父綾諱技 , 閮藉儚涓涓祵濂椾簨鍔★紝濡傛灉涓嶅瓨鍦ㄤ竴涓椿鍔ㄧ殑浜嬪姟錛岄兘浼氬紑鍚竴涓柊鐨勪簨鍔°備嬌鐢?/span>PROPAGATION_REQUIRES_NEW 鏃訛紝鍐呭眰浜嬪姟涓庡灞備簨鍔″氨鍍忎袱涓嫭绔嬬殑浜嬪姟涓鏍鳳紝涓鏃﹀唴灞備簨鍔¤繘琛屼簡鎻愪氦鍚庯紝澶栧眰浜嬪姟涓嶈兘瀵瑰叾榪涜鍥炴粴銆備袱涓簨鍔′簰涓嶅獎鍝嶃備袱涓簨鍔¤繖鏄竴涓湡姝g殑宓屽浜嬪姟銆傚悓鏃跺畠闇瑕?/span> JTA 浜嬪姟綆$悊鍣ㄧ殑鏀寔銆?/span> 浣跨敤 PROPAGATION_NESTED 鏃訛紝澶栧眰浜嬪姟鐨勫洖婊氬彲浠ュ紩璧峰唴灞備簨鍔$殑鍥炴粴銆傝屽唴灞備簨鍔$殑寮傚父騫朵笉浼氬鑷村灞備簨鍔$殑鍥炴粴錛屽畠鏄竴涓湡姝g殑宓屽浜嬪姟銆?/span> DataSourceTransactionManager 浣跨敤 savepoint 鏀寔PROPAGATION_NESTED 鏃訛紝闇瑕?/span> JDBC 3.0 浠ヤ笂椹卞姩鍙?/span> 1.4 浠ヤ笂鐨?/span> JDK 鐗堟湰鏀寔銆傚叾瀹冪殑JTA TrasactionManager 瀹炵幇鍙兘鏈変笉鍚岀殑鏀寔鏂瑰紡銆?/span> PROPAGATION_REQUIRED 搴旇鏄垜浠鍏堢殑浜嬪姟浼犳挱琛屼負銆傚畠鑳藉婊¤凍鎴戜滑澶у鏁扮殑浜嬪姟闇姹傘?/span>
These commands allow you to generate a new Java Keytool keystore file, create a CSR, and import certificates. Any root or intermediate certificates will need to be imported before importing the primary certificate for your domain.
keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048
keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr
keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks
keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
If you need to check the information within a certificate, or Java keystore, use these commands.
keytool -printcert -v -file mydomain.crt
keytool -list -v -keystore keystore.jks
keytool -list -v -keystore keystore.jks -alias mydomain
keytool -delete -alias mydomain -keystore keystore.jks
keytool -storepasswd -new new_storepass -keystore keystore.jks
keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts
絎竴縐嶆柟寮?閫傚悎浜庡叏閮℉TML鏍囩 絎簩縐嶆柟寮?IMG涔嬬被鐨勬爣絳?/span>渚嬪: 絎笁縐嶆柟寮?input涔嬬被鐨勬爣絳?/span>渚嬪: |