±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÁË·Ö²¼Ê½ÊÂÎïʵսµÄÔÀíºÍÊÂÎñģʽ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
|
|
1.1. ÔÀí½éÉÜ
1.1.1. ÊÂÎñ¿ØÖÆÔÀí
TX-LCNÓÉÁ½´óÄ£¿é×é³É, TxClient¡¢TxManager£¬TxClient×÷Ϊģ¿éµÄÒÀÀµ¿ò¼Ü£¬
ÌṩTX-LCNµÄ±ê×¼Ö§³Ö£¬TxManager×÷Ϊ·Ö²¼Ê½ÊÂÎñµÄ¿ØÖÆ·Å¡£ÊÂÎñ·¢Æð·½»òÕß²ÎÓë·´¶¼ÓÉTxClient¶ËÀ´¿ØÖÆ¡£
£¨¼òµ¥À´Ëµ¾ÍÊǵ¥¶À²¿ÊðÒ»Ì×TxManagerÄ£¿éÀ´ÊµÏÖÊÂÎñ¹ÜÀí£¬TxClient¾ÍÊÇÎÒÃÇ×Ô¼ºµÄ·þÎñϵͳ£©
ÔÀíͼÈçÏ£º

1.1.2. LCNÊÂÎñģʽ
1.1.2.1. ÔÀí½éÉÜ
LCNģʽÊÇͨ¹ý´úÀíConnectionµÄ·½Ê½ÊµÏÖ¶Ô±¾µØÊÂÎñµÄ²Ù×÷£¬
È»ºóÔÚÓÉTxManagerͳһе÷¿ØÖÆÊÂÎñ¡£µ±±¾µØÊÂÎñÌá½»»Ø¹ö»òÕ߹رÕÁ¬½Óʱ½«»áÖ´ÐмٲÙ×÷£¬ ¸Ã´úÀíµÄÁ¬½Ó½«ÓÉLCNÁ¬½Ó³Ø¹ÜÀí¡£
1.1.2.2. Ä£Ê½ÌØµã
¸Ãģʽ¶Ô´úÂëµÄǶÈëÐÔΪµÍ¡£
¸Ãģʽ½öÏÞÓÚ±¾µØ´æÔÚÁ¬½Ó¶ÔÏóÇÒ¿Éͨ¹ýÁ¬½Ó¶ÔÏó¿ØÖÆÊÂÎñµÄÄ£¿é¡£
¸ÃģʽϵÄÊÂÎñÌá½»Óë»Ø¹öÊÇÓɱ¾µØÊÂÎñ·½¿ØÖÆ£¬¶ÔÓÚÊý¾ÝÒ»ÖÂÐÔÉÏÓнϸߵı£ÕÏ¡£
¸ÃģʽȱÏÝÔÚÓÚ´úÀíµÄÁ¬½ÓÐèÒªËæÊÂÎñ·¢Æð·½Ò»¹²ÊÍ·ÅÁ¬½Ó£¬Ôö¼ÓÁËÁ¬½ÓÕ¼ÓõÄʱ¼ä
1.1.3. TCCÊÂÎñģʽ
1.1.3.1. ÔÀí½éÉÜ
TCCÊÂÎñ»úÖÆÏà¶ÔÓÚ´«Í³ÊÂÎñ»úÖÆ£¨X/Open XA Two-Phase-Commit£©£¬
ÆäÌØÕ÷ÔÚÓÚËü²»ÒÀÀµ×ÊÔ´¹ÜÀíÆ÷(RM)¶ÔXAµÄÖ§³Ö£¬¶øÊÇͨ¹ý¶Ô£¨ÓÉÒµÎñϵͳÌṩµÄ£©ÒµÎñÂß¼µÄµ÷¶ÈÀ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñ¡£
Ö÷ÒªÓÉÈý²½²Ù×÷£¬Try: ³¢ÊÔÖ´ÐÐÒµÎñ¡¢ Confirm:È·ÈÏÖ´ÐÐÒµÎñ¡¢ Cancel: È¡ÏûÖ´ÐÐÒµÎñ¡£
1.1.3.2. Ä£Ê½ÌØµã
¸Ãģʽ¶Ô´úÂëµÄǶÈëÐԸߣ¬ÒªÇóÿ¸öÒµÎñÐèҪдÈýÖÖ²½ÖèµÄ²Ù×÷¡£
¸Ãģʽ¶ÔÓÐÎÞ±¾µØÊÂÎñ¿ØÖƶ¼¿ÉÒÔÖ§³ÖʹÓÃÃæ¹ã¡£
Êý¾ÝÒ»ÖÂÐÔ¿ØÖƼ¸ºõÍêÈ«ÓÉ¿ª·¢Õß¿ØÖÆ£¬¶ÔÒµÎñ¿ª·¢ÄѶÈÒªÇó¸ß¡£
1.1.4. TXCÊÂÎñģʽ
1.1.4.1. ÔÀí½éÉÜ
TXCģʽÃüÃûÀ´Ô´ÓÚ°¢ÀïÔÆµÄGTS£¬ÊµÏÖÔÀíÊÇÔÚÖ´ÐÐSQL֮ǰ£¬ ÏȲéѯSQLµÄÓ°ÏìÊý¾Ý±£´æÆðÀ´È»ºóÔÙÖ´ÐÐÒµÎñ¡£µ±ÐèÒª»Ø¹öµÄʱºò¾Í²ÉÓÃÕâЩ¼Ç¼Êý¾Ý»Ø¹öÊÂÎñ¡£
1.1.4.2. Ä£Ê½ÌØµã
¸ÃģʽͬÑù¶Ô´úÂëµÄǶÈëÐԵ͡£
¸Ãģʽ½öÏÞÓÚ¶ÔÖ§³ÖSQL·½Ê½µÄÄ£¿éÖ§³Ö¡£
¸ÃģʽÓÉÓÚÿ´ÎÖ´ÐÐSQL֮ǰÐèÒªÏȲéѯӰÏìÊý¾Ý£¬ Òò´ËÏà±ÈLCNģʽÏûºÄ×ÊÔ´Óëʱ¼äÒª¶à¡£
¸Ãģʽ²»»áÕ¼ÓÃÊý¾Ý¿âµÄÁ¬½Ó×ÊÔ´¡£
1.2. ¿ìËÙ¿ªÊ¼
1.2.1. ͲÛ
¿ÓµãÒ»£º²»ÒªÏàÐŹٷ½ÍøÕ¾ÉϵĵĿìËÙ¿ªÊ¼ºÍʾÀý£¬²»ÖªµÀÊǶà¾ÃÒÔǰµÄÁË£¬ÎÒµ·¹ÄÁ˺ܾã¬ÏÂÏÂÀ´µÄ´úÂëȱ½ïÉÙÁ½µÄ£¬´ò°üÁËÔ´´úÂëÒ²Âú×ã²»ÁËÕâʾÀý´úÂëµÄÐèÇó
¿Óµã¶þ£º²»ÒªÖ±½ÓʹÓÃÔ´´úÂëµÄtx-manager£¬¿Ï¶¨ÈÔ¾ÉȱÉÙÅäÖ㬻òÕߺÍʾÀý´úÂë°æ±¾²»Ò»ÖÂ
1.2.2. tx-manager
https://pan.baidu.com/s/1cLKAeE#list/path=%2Fshare
link974324822- 625872931897976%2Ftx-manager&parentPath=%2Fsharelink974324822
-625872931897976
Õâ¸ötx-managerÖ±½Ó´Ó¹Ù·½ÌṩµÄÍøÅÌÏÂÔØ£¬ÎÒϵÄ4.1°æ±¾µÄ
ÐÞ¸ÄÅäÖÃÎļþ£¬eurekaºÍredis¶¼Õû³É×Ô¼ºµÄ
Ö±½Ójava -jar tx-manager.jar ÔËÐÐÆðÀ´¾Í¿ÉÒÔÁË
1.2.3. SpringCloud Demo
https://github.com/codingapi/springcloud-lcn-demo
ÉÏÊöµØÖ·Îª4.0°æ±¾µÄdemo£¬¾ÊÔÑé¿ÉÒÔʹÓÃ
ÎÒÓÃmybatis-demoÕâ¸ö°ü×öµÄÊÔÑ飬ÀïÃæÁ½¸ömodule£¬·Ö±ðÐÞ¸Ä application.properties£¬Ö»ÐèÒªÐÞ¸ÄÊý¾Ý¿âmysqlºÍeurekaµØÖ·¾ÍÐÐ
µ±È»Êý¾Ý¿â±ðÍüÁ˽¨£¬½¨¸ötest¿â£¬Ð½¨ÏÂÁбíÓÃÓÚ²âÊÔ
USE test;
DROP TABLE IF EXISTS `t_test`;
CREATE TABLE `t_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
1.3. ʹÓÃ×ܽá
Èç¹ûÐèÒªÔÚ×Ô¼ºµÄÏîĿʹÓÃLCNÖ»ÐèÒªÁ½²½
ÒýÈëpom
<lcn.last.version>4.1.0</lcn.last.version>
<dependency>
<groupId>com.codingapi</groupId>
<artifactId>transaction-springcloud </artifactId>
<version>${lcn.last.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.codingapi</groupId>
<artifactId>tx-plugins-db</artifactId>
<version>${lcn.last.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency> |
¼ÓÒ»¸ö×¢½â£¬Æ©Èç
@Override
@TxTransaction(isStart = true)
@Transactional
public int save() {
int rs2 = demo2Client.save();
int rs1 = testMapper.save ("mybatis-hello-1");
// int rs22 = demo2Client.save();
// int v = 100/0;
return rs1+rs2;
} |
¼ÓÉÏ @TxTransaction(isStart = true) ±íʾÊÂÎñ¿ªÊ¼£¬ÔÚ×ßÍêÕû¸öÁ÷³ÌÒÔǰ£¬ÊÂÎñ¶¼»áÓÉtx-managerÀ´Ðµ÷
1.4. 4.0Óë5.0°æ±¾
5.0¸Õ³öÀ´Ã»¶à¾Ã£¬Ò²¾Í1Ô·ݿªÊ¼´óÁ¿Ìá½»£¬²¢ÒѾ½»ÓÉcodingApiÍŶӿª·¢Î¬»¤£¬ ¶Ô5.0µÄʹÓ㬻òÐí»¹Òª¾ÀúЩʱ¼äµÄÄ¥Á·
¶ÔÉÏÊöÕâ¸ö×¢½â£¬ÔÚ4.0ÎÒÕÒµ½Ô´úÂëÊÇÕâÑùµÄ
/**
* Created by lorne on 2017/6/26.
*/
@Target({ElementType.METHOD, Element Type.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TxTransaction {
/**
* ÊÇ·ñLCNÊÂÎñ·¢Æð·½
* @return true ÊÇ:ÊÇ·¢Æð·½ false ·ñ:ÊDzÎÓë·½
*/
boolean isStart() default false;
/**
* »Ø¹öÒì³£
* @return
*/
Class<? extends Throwable>[] rollbackFor
() default {};
/**
* ²»»Ø¹öÒì³£
* @return
*/
Class<? extends Throwable>[] noRollbackFor
() default {};
} |
ÔÚ5.0ÎÒͬÑùÕÒµ½ÁËÔ´´úÂ룬ÊÇÕâÑùµÄ
/**
* Created by lorne on 2017/6/26.
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TxTransaction {
/**
* ÊÂÎñģʽ transaction type
*
* @return lcn, tcc, txc
* @see Transactions
*/
String type() default Transactions.LCN;
/**
* ·Ö²¼Ê½ÊÂÎñ´«²¥ÐÐΪ
*
* @return ´«²¥ÐÐΪ
* @see DTXPropagation
*/
DTXPropagation propagation() default DTXPropagation.REQUIRED;
} |
ºÜÃ÷ÏÔ£¬×¢½âʹÓúÍʵÏÖ¶¼ÍêÈ«±äÁË£¬4.0ºÍ5.0Ã÷ÏÔ²»ÄܼæÈÝÁË¡£
ͨ¹ýа汾µÄÒ»¶Ñ×¢½âÒ²¿ÉÒÔ¿´³öÀ´£¬4.0°æ±¾Ö»Ö§³ÖLCNģʽ£¬ÏëÒª³¢ÊÔTCCºÍTXCµÄ£¬ °Ñ5.0µÄDemoÈ¥ÅÜͨ°É

|