±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÁËLCN5.0.2ÓÐ3ÖÖģʽ£¬·Ö±ðÊÇLCNģʽ£¬TCCģʽ£¬TXCģʽ,Ï£Íû¶ÔÄúµÄѧϰ
ÓÐËù°ïÖú¡£
|
|
Ò»¡¢¼ò½é
LCN·Ö²¼Ê½ÊÂÎñ¿ò¼ÜÆä±¾Éí²¢²»´´½¨ÊÂÎñ£¬¶øÊÇ»ùÓÚ¶Ô±¾µØÊÂÎñµÄе÷´Ó¶ø´ïµ½ÊÂÎñÒ»ÖÂÐÔµÄЧ¹û¡£
LCNģʽ£º
LCNģʽÊÇͨ¹ý´úÀíConnectionµÄ·½Ê½ÊµÏÖ¶Ô±¾µØÊÂÎñµÄ²Ù×÷£¬È»ºóÔÚÓÉTxManagerͳһе÷¿ØÖÆÊÂÎñ¡£µ±±¾µØÊÂÎñÌá½»»Ø¹ö»òÕ߹رÕÁ¬½Óʱ½«»áÖ´ÐмٲÙ×÷£¬¸Ã´úÀíµÄÁ¬½Ó½«ÓÉLCNÁ¬½Ó³Ø¹ÜÀí¡£
¸ÃģʽµÄÌØµã£º
- ¸Ãģʽ¶Ô´úÂëµÄǶÈëÐÔΪµÍ¡£
- ¸Ãģʽ½öÏÞÓÚ±¾µØ´æÔÚÁ¬½Ó¶ÔÏóÇÒ¿Éͨ¹ýÁ¬½Ó¶ÔÏó¿ØÖÆÊÂÎñµÄÄ£¿é¡£
- ¸ÃģʽϵÄÊÂÎñÌá½»Óë»Ø¹öÊÇÓɱ¾µØÊÂÎñ·½¿ØÖÆ£¬¶ÔÓÚÊý¾ÝÒ»ÖÂÐÔÉÏÓнϸߵı£ÕÏ¡£
- ¸ÃģʽȱÏÝÔÚÓÚ´úÀíµÄÁ¬½ÓÐèÒªËæÊÂÎñ·¢Æð·½Ò»¹²ÊÍ·ÅÁ¬½Ó£¬Ôö¼ÓÁËÁ¬½ÓÕ¼ÓõÄʱ¼ä¡£
TCCģʽ£º
TCCÊÂÎñ»úÖÆÏà¶ÔÓÚ´«Í³ÊÂÎñ»úÖÆ£¨X/Open XA Two-Phase-Commit£©£¬ÆäÌØÕ÷ÔÚÓÚËü²»ÒÀÀµ×ÊÔ´¹ÜÀíÆ÷(RM)¶ÔXAµÄÖ§³Ö£¬¶øÊÇͨ¹ý¶Ô£¨ÓÉÒµÎñϵͳÌṩµÄ£©ÒµÎñÂß¼µÄµ÷¶ÈÀ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñ¡£Ö÷ÒªÓÉÈý²½²Ù×÷£¬Try: ³¢ÊÔÖ´ÐÐÒµÎñ¡¢ Confirm:È·ÈÏÖ´ÐÐÒµÎñ¡¢ Cancel: È¡ÏûÖ´ÐÐÒµÎñ¡£
¸ÃģʽµÄÌØµã£º
- ¸Ãģʽ¶Ô´úÂëµÄǶÈëÐԸߣ¬ÒªÇóÿ¸öÒµÎñÐèҪдÈýÖÖ²½ÖèµÄ²Ù×÷¡£
- ¸Ãģʽ¶ÔÓÐÎÞ±¾µØÊÂÎñ¿ØÖƶ¼¿ÉÒÔÖ§³ÖʹÓÃÃæ¹ã¡£
- Êý¾ÝÒ»ÖÂÐÔ¿ØÖƼ¸ºõÍêÈ«ÓÉ¿ª·¢Õß¿ØÖÆ£¬¶ÔÒµÎñ¿ª·¢ÄѶÈÒªÇó¸ß¡£
TXCģʽ£º
TXCģʽÃüÃûÀ´Ô´ÓÚÌÔ±¦£¬ÊµÏÖÔÀíÊÇÔÚÖ´ÐÐSQL֮ǰ£¬ÏȲéѯSQLµÄÓ°ÏìÊý¾Ý£¬È»ºó±£´æÖ´ÐеÄSQL¿ì×ßÐÅÏ¢ºÍ´´½¨Ëø¡£µ±ÐèÒª»Ø¹öµÄʱºò¾Í²ÉÓÃÕâЩ¼Ç¼Êý¾Ý»Ø¹öÊý¾Ý¿â£¬Ä¿Ç°ËøÊµÏÖÒÀÀµredis·Ö²¼Ê½Ëø¿ØÖÆ¡£
¸ÃģʽµÄÌØµã£º
- ¸ÃģʽͬÑù¶Ô´úÂëµÄǶÈëÐԵ͡£
- ¸Ãģʽ½öÏÞÓÚ¶ÔÖ§³ÖSQL·½Ê½µÄÄ£¿éÖ§³Ö¡£
- ¸ÃģʽÓÉÓÚÿ´ÎÖ´ÐÐSQL֮ǰÐèÒªÏȲéѯӰÏìÊý¾Ý£¬Òò´ËÏà±ÈLCNģʽÏûºÄ×ÊÔ´Óëʱ¼äÒª¶à¡£
- ¸Ãģʽ²»»áÕ¼ÓÃÊý¾Ý¿âµÄÁ¬½Ó×ÊÔ´¡£
¶þ¡¢ÔÀí
ºËÐIJ½Öè
1.´´½¨ÊÂÎñ×é
ÊÇÖ¸ÔÚÊÂÎñ·¢Æð·½¿ªÊ¼Ö´ÐÐÒµÎñ´úÂë֮ǰÏȵ÷ÓÃTxManager´´½¨ÊÂÎñ×é¶ÔÏó£¬È»ºóÄõ½ÊÂÎñ±êʾGroupIdµÄ¹ý³Ì¡£
2.Ìí¼ÓÊÂÎñ×é
Ìí¼ÓÊÂÎñ×éÊÇÖ¸²ÎÓë·½ÔÚÖ´ÐÐÍêÒµÎñ·½·¨ÒԺ󣬽«¸ÃÄ£¿éµÄÊÂÎñÐÅÏ¢Ìí¼Ó֪ͨ¸øTxManagerµÄ²Ù×÷¡£
3.¹Ø±ÕÊÂÎñ×é
ÊÇÖ¸ÔÚ·¢Æð·½Ö´ÐÐÍêÒµÎñ´úÂëÒԺ󣬽«·¢Æð·½Ö´Ðнá¹û״̬֪ͨ¸øTxManagerµÄ¶¯×÷¡£µ±Ö´ÐÐÍê¹Ø±ÕÊÂÎñ×éµÄ·½·¨ÒÔºó£¬TxManager½«¸ù¾ÝÊÂÎñ×éÐÅÏ¢À´Í¨ÖªÏàÓ¦µÄ²ÎÓëÄ£¿éÌá½»»ò»Ø¹öÊÂÎñ¡£
ÊÂÎñ¿ØÖÆÔÀí

LCNÊÂÎñ¿ØÖÆÔÀíÊÇÓÉÊÂÎñÄ£¿éTxClientϵĴúÀíÁ¬½Ó³ØÓëTxManagerµÄе÷ÅäºÏÍê³ÉµÄÊÂÎñе÷¿ØÖÆ¡£
TxClientµÄ´úÀíÁ¬½Ó³ØÊµÏÖÁËjavax.sql.DataSource½Ó¿Ú£¬²¢ÖØÐ´ÁËclose·½·¨£¬ÊÂÎñÄ£¿éÔÚÌá½»¹Ø±ÕÒÔºóTxClientÁ¬½Ó³Ø½«Ö´ÐÐ"¼Ù¹Ø±Õ"²Ù×÷£¬µÈ´ýTxManagerе÷Íê³ÉÊÂÎñÒÔºóÔڹرÕÁ¬½Ó¡£
¶ÔÓÚ´úÀíÁ¬½Ó³ØµÄÓÅ»¯
×Ô¶¯³¬Ê±»úÖÆ£¬ÈκÎͨѶ¶¼ÓÐ×î´ó³¬Ê±ÏÞÖÆ£¬²ÎÓëÄ£¿éÔڵȴý֪ͨµÄ״̬ÏÂÒ²ÓÐ×î´ó³¬Ê±ÏÞÖÆ£¬µ±³¬¹ýʱ¼äÏÞÖÆÒÔºóÊÂÎñÄ£¿é½«ÏÈÈ·ÈÏÊÂÎñ״̬£¬È»ºóÔÙ¾ö¶¨Ö´ÐÐÌá½»»òÕ߻عö²Ù×÷£¬Ö÷ҪΪÁ˸ø×î´ó×ÊÔ´Õ¼ÓÃʱ¼ä¼ÓÉÏÏÞÖÆ¡£
ÖÇÄÜʶ±ð´´½¨²»Í¬µÄÁ¬½Ó ¶ÔÓÚÖ»¶Á²Ù×÷¡¢·ÇÊÂÎñ²Ù×÷LCN½«²»¿ªÆô´úÀí¹¦ÄÜ£¬·µ»Ø±¾µØÁ¬½Ó¶ÔÏ󣬶ÔÓÚ²¹³¥ÊÂÎñµÄÆô¶¯·½½«¿ªÆô»Ø¹öÁ¬½Ó¶ÔÏó£¬Ö´ÐÐÍêÒµÎñÒÔºóÂíÉϻعöÊÂÎñ¡£
LCNÁ¬½ÓÖØÓûúÖÆ µ±Ä£¿éÔÚͬһ´ÎÊÂÎñϱ»Öظ´Ö´ÐÐʱ£¬Á¬½Ó×ÊÔ´»á±»ÖØÓã¬Ìá¸ßÁ¬½ÓµÄʹÓÃÂÊ¡£
ÊÂÎñ²¹³¥»úÖÆ
ΪʲôÐèÒªÊÂÎñ²¹³¥£¿
ÊÂÎñ²¹³¥ÊÇÖ¸ÔÚÖ´ÐÐij¸öÒµÎñ·½·¨Ê±£¬±¾Ó¦¸ÃÖ´Ðгɹ¦µÄ²Ù×÷È´ÒòΪ·þÎñÆ÷¹Ò»ú»òÕßÍøÂç¶¶¶¯µÈÎÊÌâµ¼ÖÂÊÂÎñûÓÐÕý³£Ìá½»£¬´ËÖÖ³¡¾°¾ÍÐèҪͨ¹ý²¹³¥À´Íê³ÉÊÂÎñ£¬´Ó¶ø´ïµ½ÊÂÎñµÄÒ»ÖÂÐÔ¡£
²¹³¥»úÖÆµÄ´¥·¢Ìõ¼þ£¿
µ±Ö´ÐйرÕÊÂÎñ×é²½Öèʱ£¬Èô·¢Æð·½½ÓÊܵ½Ê§°ÜµÄ״̬ºó½«»á°Ñ¸Ã´ÎÊÂÎñʶ±ðΪ´ý²¹³¥ÊÂÎñ£¬È»ºó·¢Æð·½½«¸Ã´ÎÊÂÎñÊý¾ÝÒ첽֪ͨ¸øTxManager¡£TxManager½ÓÊܵ½²¹³¥ÊÂÎñÒÔºóÏÈ֪ͨ²¹³¥»Øµ÷µØÖ·£¬È»ºóÔÙ¸ù¾ÝÊÇ·ñ¿ªÆô×Ô¶¯²¹³¥ÊÂÎñ״̬À´²¹³¥»ò±£´æ¸Ã´ÎÇÐÃæÊÂÎñÊý¾Ý¡£
²¹³¥ÊÂÎñ»úÖÆ
LCNµÄ²¹³¥ÊÂÎñÔÀíÊÇÄ£ÄâÉÏ´Îʧ°ÜÊÂÎñµÄÇëÇó£¬È»ºó´«µÝ¸øTxClientÄ£¿éÈ»ºóÔÙ´ÎÖ´ÐиôÎÇëÇóÊÂÎñ¡£
Ä£Äⳡ¾°ÑÝʾ
Èô´æÔÚÊÂÎñ·¢Æð·½¡¢²ÎÓë·½A¡¢²ÎÓë·½B¡£µ÷ÓùØÏµÍ¼ÈçÏÂ

ÄÇôËûÃÇÕý³£Ö´ÐÐÒµÎñµÄʱÐòͼΪ£º

Èô²ÎÓë·½B³öÏÖÒì³££¬ÄÇôËûÃǵÄÒµÎñʱÐòͼΪ£º

ÈôËûÃǵĵ÷ÓùØÏµÊÇÕâÑùµÄÇé¿ö

´Ëʱ·¢Éú²ÎÓë·½B³öÏÖÒ쳣ʱËûÃǵÄʱÐòͼΪ£º

Èý¡¢Ê¹ÓÃ
»·¾³£º
SpringBoot 2.0.4
SpringCloud(Eureka+Gateway) Finchley.SR3
MySQL 5.7
Redis
LCN5.0.2
×¼±¸£º
3.1´î½¨ºÃRedisºÍMySQL
SQL½¨±íÓï¾ä£¨ÔÚtxlcn-tmÄ£¿éµÄresourceĿ¼Ï£©
/*
Navicat Premium Data Transfer
Source Server : local
Source Server Type : MySQL
Source Server Version : 100309
Source Host : localhost:3306
Source Schema : tx-manager
Target Server Type : MySQL
Target Server Version : 100309
File Encoding : 65001
Date: 29/12/2018 18:35:59
*/
CREATE DATABASE IF NOT EXISTS `tx-manager` DEFAULT
CHARSET utf8 COLLATE utf8_general_ci;
USE `tx-manager`;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_tx_exception
-- ----------------------------
DROP TABLE IF EXISTS `t_tx_exception`;
CREATE TABLE `t_tx_exception` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE
utf8mb4_general_ci NULL DEFAULT NULL,
`unit_id` varchar(32) CHARACTER SET utf8mb4 COLLATE
utf8mb4_general_ci NULL DEFAULT NULL,
`mod_id` varchar(128) CHARACTER SET utf8mb4 COLLATE
utf8mb4_general_ci NULL DEFAULT NULL,
`transaction_state` tinyint(4) NULL DEFAULT NULL,
`registrar` tinyint(4) NULL DEFAULT NULL,
`ex_state` tinyint(4) NULL DEFAULT NULL COMMENT
'0 ´ý´¦Àí 1ÒÑ´¦Àí',
`remark` varchar(10240) NULL DEFAULT NULL COMMENT
'±¸×¢',
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 967 CHARACTER
SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT
= Dynamic;
SET FOREIGN_KEY_CHECKS = 1
|
3.2ÏÂÔØÔ´Âë²¢±àÒë
Ô´ÂëÏÂÔØµØÖ·£ºhttps://github.com/codingapi/tx-lcn
¹¤³ÌĿ¼

ÐÞ¸Ätxlcn-tmµÄÅäÖÃÎļþapplication.properties
####################### ·þÎñ ##################################
##########
spring.application.name=TransactionManager
server.port=7970
####################### Êý¾Ý¿â #####################
##### ##################
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://47.92.145.192:3306
/scm_transaction? useUnicode=true&characterEncoding=utf-8&allowMultiQueries
=true&useSSL=false
spring.datasource.username=db_user2
spring.datasource.password=db_pass
# ÑéÖ¤Á¬½ÓÊÇ·ñÓÐЧ¡£ ´Ë²ÎÊý±ØÐëÉèÖÃΪ·Ç¿Õ×Ö·û´®, ÏÂÃæÈýÏîÉèÖóÉtrue²ÅÄÜÉú
spring.datasource.validationQuery=SELECT 1
# Ö¸Ã÷Á¬½ÓÊÇ·ñ±»¿ÕÏÐÁ¬½Ó»ØÊÕÆ÷(Èç¹ûÓÐ)½øÐмìÑé. Èç¹û¼ì²âʧ°Ü, ÔòÁ¬½Ó½«±»´Ó³ØÖÐÈ¥³ý.
spring.datasource.testWhileIdle=true
# Ö¸Ã÷ÊÇ·ñÔÚ´Ó³ØÖÐÈ¡³öÁ¬½Óǰ½øÐмìÑé, Èç¹û¼ìÑéʧ°Ü, Ôò´Ó³ØÖÐÈ¥³ýÁ¬½Ó²¢³¢ÊÔÈ¡³öÁíÒ»¸ö
spring.datasource.testOnBorrow=true
# Ö¸Ã÷ÊÇ·ñÔڹ黹µ½³ØÖÐǰ½øÐмìÑé
spring.datasource.testOnReturn=false
# ÒÔÏ¿ÉÊ¡ÂÔ
# ³õʼ»¯´óС£¬×îС£¬×î´ó
spring.datasource.initialSize=5
spring.datasource.minIdle=10
spring.datasource.maxActive=1000
# ÅäÖûñÈ¡Á¬½ÓµÈ´ý³¬Ê±µÄʱ¼ä
spring.datasource.maxWait=60000
#ÅäÖüä¸ô¶à¾Ã²Å½øÐÐÒ»´Î¼ì²â£¬ ¼ì²âÐèÒª¹Ø±ÕµÄ¿ÕÏÐÁ¬½Ó£¬µ¥Î»ÊǺÁÃë
spring.datasource.timeBetweenEvictionRunsMillis=60000
#ÅäÖÃÒ»¸öÁ¬½ÓÔÚ³ØÖÐ×îСÉú´æµÄʱ¼ä£¬µ¥Î»ÊǺÁÃë
spring.datasource.minEvictableIdleTimeMillis=300000
#´ò¿ªPSCache£¬²¢ÇÒÖ¸¶¨Ã¿¸öÁ¬½ÓÉÏPSCacheµÄ´óС
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnection
Size=20
#ÅäÖÃ¼à¿ØÍ³¼ÆÀ¹½ØµÄfilters£¬ È¥µôºó¼à¿Ø½çÃæsqlÎÞ·¨Í³¼Æ£¬ 'wall'ÓÃÓÚ·À»ðǽ
spring.datasource.filters=stat,wall,log4j
#ͨ¹ýconnectPropertiesÊôÐÔÀ´´ò¿ªmergeSql¹¦ÄÜ£»ÂýSQL¼Ç¼
spring.datasource.connectionProperties=druid.stat.mergeSql=
true;druid.stat.slowSqlMillis=1000;druid.stat.logSlowSql=true
#ºÏ²¢¶à¸öDruidDataSourceµÄ¼à¿ØÊý¾Ý
spring.datasource.useGlobalDataSourceStat=true
#spring.datasource.WebStatFilter.exclusions="*.js,*.gif,*.jpg,*.
png,*.css,*.ico,/druid/*"
#spring.datasource.stat-view-servlet.login-username=admin
#spring.datasource.stat-view-servlet.login-password=admin
####################### Êý¾Ý¿â·½ÑÔ ############################
################
spring.jpa.database-platform=org.hibernate.dialect.
MySQL5InnoDBDialect
# µÚÒ»´ÎÔËÐпÉÒÔÉèÖÃΪ: create, ΪTM´´½¨³Ö¾Ã»¯Êý¾Ý¿â±í
spring.jpa.hibernate.ddl-auto=update
####################### Redis ########################
####################
spring.redis.host=47.92.145.192
spring.redis.port=6379
spring.redis.password=WZTH@dev123
####################### ÊÂÎñ #######################
#####################
# TM¼àÌýIP. ĬÈÏΪ 127.0.0.1
tx-lcn.manager.host=127.0.0.1
# TM¼àÌýSocket¶Ë¿Ú. ĬÈÏΪ ${server.port} - 100
tx-lcn.manager.port=8070
# ÐÄÌø¼ì²âʱ¼ä(ms). ĬÈÏΪ 300000
tx-lcn.manager.heart-time=300000
# ·Ö²¼Ê½ÊÂÎñÖ´ÐÐ×Üʱ¼ä(ms). ĬÈÏΪ36000
tx-lcn.manager.dtx-time=8000
# ²ÎÊýÑÓ³Ùɾ³ýʱ¼äµ¥Î»ms ĬÈÏΪdtx-timeÖµ
tx-lcn.message.netty.attr-delay-time=$ {tx-lcn.manager.dtx-time}
# ÊÂÎñ´¦Àí²¢·¢µÈ¼¶. ĬÈÏΪ»úÆ÷Âß¼ºËÐÄÊý5±¶
tx-lcn.manager.concurrent-level=160
# TMºǫ́µÇ½ÃÜÂ룬ĬÈÏֵΪcodingapi
tx-lcn.manager.admin-key=123456
# ·Ö²¼Ê½ÊÂÎñËø³¬Ê±Ê±¼ä ĬÈÏΪ-1£¬ µ±-1ʱ»á ÓÃtx-lcn.manager. dtx-timeµÄʱ¼ä
tx-lcn.manager.dtx-lock-time=${tx-lcn.manager.dtx-time}
# Ñ©»¨Ëã·¨µÄsequence볤¶È£¬Ä¬ÈÏΪ12λ.
tx-lcn.manager.seq-len=12
# Òì³£»Øµ÷¿ª¹Ø¡£¿ªÆôʱÇëÖÆ¶¨ex-url
tx-lcn.manager.ex-url-enabled=false
# ÊÂÎñÒ쳣֪ͨ£¨ÈκÎhttpÐÒ鵨ַ¡£ δָ¶¨ÐÒéʱ£¬ ΪTMÌṩÄÚÖù¦Äܽӿڣ©¡£Ä¬ÈÏÊÇÓʼþ֪ͨ
tx-lcn.manager.ex-url=/provider/email-to/306509906@
qq.com
|
×¢Ò⣺¸öÈËÐÞ¸ÄÁËÊý¾Ý¿âµÄÃû³Æ£¬ ºÍÓû§ÃûÃÜÂ룬 ¸ù¾Ý×Ô¼ºµÄʵ¼ÊÇé¿öÐÞ¸Ä
txlcn-tmµÄpomÐ޸ģ¬·Å¿ªÅäÖÃ

×¢µôÅäÖÃ

×îºóʹÓÃmaven±àÒ룬ȥµôtest£¬·ñÔò±àÒëºÜÂý
.3Æô¶¯txlcn-tmÄ£¿é
²»ÖªµÀÔõôÆô¶¯µÄ¿ÉÒÔ×ÔÐвéÔÄSpringbootÔËÐз½Ê½
Æô¶¯ºó´ò¿ªºǫ́µØÖ·http://localhost:7970£¬³õʼÃÜÂëÊÇcodingapi£¬ÎÒÕâÀï¸Ä³ÉÁË123456

µÇ½ºó

3.4ÏîÄ¿ÅäÖÃ
pomÒýÓÃ
<!-- LCN
--> <dependency> <groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency> <dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-txmsg-netty</artifactId>
<version>5.0.2.RELEASE</version>
</dependency> <dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tm</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
|
ÅäÖÃÎļþÔö¼ÓÊÂÎñ¹ÜÀíÖÐÐĵØÖ·
# LCN
tx-lcn:
client:
manager-address: 127.0.0.1:8070
logger:
enabled: true
# driver-class-name: com.mysql.jdbc.Driver
# jdbc-url: jdbc:mysql://47.92.145.192:3306/scm_
transaction? useUnicode=true&characterEncoding=utf-8&allowMultiQueries
=true&useSSL=false
# username: db_user2
# password: db_pass
|
Consumer¡¢Provider1¡¢Provider2Æô¶¯ÀàÔö¼Ó×¢½â
@EnableDistributedTransaction
// ÆôÓ÷ֲ¼Ê½ÊÂÎñ |
ÔÚPriovider1¡¢Provider2ÒªÖ´Ðеķ½·¨ÉÏÔö¼Ó×¢½â
@LcnTransaction //·Ö²¼Ê½ÊÂÎñ×¢½â
@Transactional //±¾µØÊÂÎñ×¢½â |
×îºóÔËÐÐ ÑéÖ¤¼´¿É
|