±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ
csdn£¬½â¾ö·½°¸£¬ÊÂÎñ¿ØÖÆÔÀíºÍºËÐIJ½ÖèÕ⼸¸ö·½ÃæÀ´²ûÊöͨ¹ýLCNÀ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñ¡£
|
|
LCN½éÉÜ
¹Ù·½Ðû³Æ£ºLCN²¢²»Éú²úÊÂÎñ£¬LCNÖ»ÊDZ¾µØÊÂÎñµÄе÷¹¤¡£
TX-LCN¶¨Î»ÓÚÒ»¿îÊÂÎñе÷ÐÔ¿ò¼Ü£¬¿ò¼ÜÆä±¾Éí²¢²»²Ù×÷ÊÂÎñ£¬¶øÊÇ»ùÓÚ¶ÔÊÂÎñµÄе÷´Ó¶ø´ïµ½ÊÂÎñÒ»ÖÂÐÔµÄЧ¹û¡£
LCN½â¾ö·½°¸
ÔÚÒ»¸ö·Ö²¼Ê½ÏµÍ³Ï´æÔÚ¶à¸öÄ£¿éе÷À´Íê³ÉÒ»´ÎÒµÎñ¡£ÄÇô¾Í´æÔÚÒ»´ÎÒµÎñÊÂÎñÏ¿ÉÄܺá¿ç¶àÖÖÊý¾ÝÔ´½ÚµãµÄ¿ÉÄÜ¡£TX-LCN½«¿ÉÒÔ½â¾öÕâÑùµÄÎÊÌâ ¡£
ÀýÈç´æÔÚ·þÎñÄ£¿éA ¡¢B¡¢ C¡£AÄ£¿éÊÇmysql×÷ΪÊý¾ÝÔ´µÄ·þÎñ£¬BÄ£¿éÊÇ»ùÓÚredis×÷ΪÊý¾ÝÔ´µÄ·þÎñ£¬CÄ£¿éÊÇ»ùÓÚmongo×÷ΪÊý¾ÝÔ´µÄ·þÎñ¡£ÈôÐèÒª½â¾öËûÃǵÄÊÂÎñÒ»ÖÂÐÔ¾ÍÐèÒªÕë¶Ô²»Í¬µÄ½Úµã²ÉÓò»Í¬µÄ·½°¸£¬²¢ÇÒͳһе÷Íê³É·Ö²¼Ê½ÊÂÎñµÄ´¦Àí¡£

Èô²ÉÓÃTX-LCN·Ö²¼Ê½ÊÂÎñ¿ò¼Ü£¬Ôò¿ÉÒÔ½«AÄ£¿é²ÉÓÃLCNģʽ¡¢B/C²ÉÓÃTCCģʽ¾ÍÄÜÍêÃÀ½â¾ö¡£
ÊÂÎñ¿ØÖÆÔÀí
TX-LCNÓÉÁ½´óÄ£¿é×é³É, TxClient¡¢TxManager£¬TxClient×÷Ϊģ¿éµÄÒÀÀµ¿ò¼Ü£¬ÌṩTX-LCNµÄ±ê×¼Ö§³Ö£¬TxManager×÷Ϊ·Ö²¼Ê½ÊÂÎñµÄ¿ØÖÆ·Å¡£ÊÂÎñ·¢Æð·½»òÕß²ÎÓë·´¶¼ÓÉTxClient¶ËÀ´¿ØÖÆ¡£

ºËÐIJ½Öè
´´½¨ÊÂÎñ×é
ÊÇÖ¸ÔÚÊÂÎñ·¢Æð·½¿ªÊ¼Ö´ÐÐÒµÎñ´úÂë֮ǰÏȵ÷ÓÃTxManager´´½¨ÊÂÎñ×é¶ÔÏó£¬È»ºóÄõ½ÊÂÎñ±êʾGroupIdµÄ¹ý³Ì¡£
¼ÓÈëÊÂÎñ×é
Ìí¼ÓÊÂÎñ×éÊÇÖ¸²ÎÓë·½ÔÚÖ´ÐÐÍêÒµÎñ·½·¨ÒԺ󣬽«¸ÃÄ£¿éµÄÊÂÎñÐÅϢ֪ͨ¸øTxManagerµÄ²Ù×÷¡£
֪ͨÊÂÎñ×é
ÊÇÖ¸ÔÚ·¢Æð·½Ö´ÐÐÍêÒµÎñ´úÂëÒԺ󣬽«·¢Æð·½Ö´Ðнá¹û״̬֪ͨ¸øTxManager,TxManager½«¸ù¾ÝÊÂÎñ×îÖÕ״̬ºÍÊÂÎñ×éµÄÐÅÏ¢À´Í¨ÖªÏàÓ¦µÄ²ÎÓëÄ£¿éÌá½»»ò»Ø¹öÊÂÎñ£¬²¢·µ»Ø½á¹û¸øÊÂÎñ·¢Æð·½¡£
ʵս֮-TxManager
LCN¹Ù·½ÎĵµÖеĿìËÙ¿ªÊ¼£¬ËµÊµ»°£¬»¹Õæ¿ìËÙ²»ÁË£¬Ê×ÏÈÔÛÃÇÏÈ¿´Ï¹ٷ½ÎĵµÔõô˵µÄ¡£
½¨Öмä¼þÊý¾Ý¿â
Ãû³ÆÎª: tx-manager,²¢´´½¨±í¡£
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,
`remark` varchar(4096) NULL DEFAULT NULL,
`ex_state` tinyint(4) NULL DEFAULT NULL COMMENT
'0 δ½â¾ö 1Òѽâ¾ö',
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER
SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT
= Dynamic; |
TM·þÎñ´î½¨

½«¹Ù·½Ô´Âë²Ö¿âÖеÄtxlcn-tmÖ±½Ó´ò°ü£¬È»ºóÔËÐм´¿É£¬TMÖмä¼þ¾ÍËã´îÆðÀ´ÁË,Èç¹ûÖ±½Ó°Ñtxlcn-tmÁà³öÀ´£¬´ò°üÊÇ´ò²»³É¹¦µÄ£¬ÒòΪtxlcn-tm ÒÀÀµÁËÆäËûµÄtxlcnµÄÆäËû·þÎñ,´ò°üµÄ»°ÐèÒª°ÑÆäËû°üÒ²Ò»Æð´ò½øÈ¥£¬ÎÒÏÖÔÚÊÇÖ±½Ó±¾µØµ¼ÈëIDEÔËÐеģ¬ÊÇ¿ÉÒԵġ£

TM·þÎñÖÐ application.propertiesÅäÖÃ
spring.application.name=TransactionManager
server.port=7970
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8&usessl=false
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
#RedisÅäÖÃ
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
tx-lcn.manager.admin-key=lcn
#spring.application.name=TransactionManager
#server.port=7970
#
## JDBC Êý¾Ý¿âÅäÖÃ
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
#spring.datasource.username=root
#spring.datasource.password=123456
#
## Êý¾Ý¿â·½ÑÔ
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#
## µÚÒ»´ÎÔËÐпÉÒÔÉèÖÃΪ: create, ΪTM´´½¨³Ö¾Ã»¯Êý¾Ý¿â±í
#spring.jpa.hibernate.ddl-auto=validate
#
## 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=codingapi
#
## ·Ö²¼Ê½ÊÂÎñËø³¬Ê±Ê±¼ä ĬÈÏΪ-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/***@**.com
#×¢Ò⣨NOTE£©
#(1) TxManagerËùÓÐÅäÖþùÓÐĬÈÏÅäÖã¬Çë°´Ð踲¸ÇĬÈÏÅäÖá£
#(2) ÌØ±ð×¢Òâ TxManager½ø³Ì»á¼àÌýÁ½¸ö¶Ë¿ÚºÅ£¬Ò»¸öΪTxManager¶Ë¿Ú£¬ÁíÒ»¸öÊÇÊÂÎñÏûÏ¢¶Ë¿Ú¡£TxClientĬÈÏÁ¬½ÓÊÂÎñÏûÏ¢¶Ë¿ÚÊÇ8070£¬
ËùÒÔ£¬Îª±£Ö¤TX-LCN»ùÓÚĬÈÏÅäÖÃÔËÐÐÁ¼ºÃ£¬ÇëÉèÖÃTxManager¶Ë¿ÚºÅΪ8069
»òÕßÖ¸¶¨ÊÂÎñÏûÏ¢¶Ë¿ÚΪ8070
#(3) ·Ö²¼Ê½ÊÂÎñÖ´ÐÐ×Üʱ¼ä a Óë TxClientͨѶ×î´óµÈ´ýʱ¼ä b¡¢TxManagerͨѶ×î´óµÈ´ýʱ¼ä
c¡¢Î¢·þÎñ¼äͨѶʱ¼ä d¡¢Î¢·þÎñµ÷ÓÃÁ´³¤¶È e ¼¸¸öʱ¼ä´æÔÚ×ÅÒÀÀµ¹ØÏµ¡£ a >=
2c + (b + c + d) * (e - 1), ÌØ±ðµØ£¬b¡¢c¡¢d Ò»ÖÂʱ£¬a
>= (3e-1)b¡£ÄãÒ²¿ÉÒÔÔÚ´ËÀíÂÛÉÏÊʵ±ÔÚ¼õСaµÄÖµ£¬·¢ÉúÒ쳣ʱÄܸü¿ìµÃµ½×Ô¶¯²¹³¥£¬¼´
a >= (3e-1)b - ¦¤£¨ÔÒò£©¡£ ×îºó£¬µ÷ÓÃÁ´Ð¡ÓÚµÈÓÚ3ʱ£¬½«»ùÓÚĬÈÏÅäÖÃÔËÐÐÁ¼ºÃ
#(4) ÈôÓÃtx-lcn.manager.ex-url=/provider/email-to/xxx@xx.xxx
Õâ¸öÅäÖã¬ÅäÖùÜÀíÔ±ÓÊÏäÐÅÏ¢(ÈçQQÓÊÏä)£º
#spring.mail.host=smtp.qq.com
#spring.mail.port=587
#spring.mail.username=xxxxx@**.com |
Æô¶¯³É¹¦ºó½çÃæ

TxManager½ø³Ì»á¼àÌýÁ½¸ö¶Ë¿ÚºÅ£¬Ò»¸öΪTxManager 7970 ¶Ë¿Ú£¬ÁíÒ»¸öÊÇÊÂÎñÏûÏ¢¶Ë¿Ú 8070¡£
ʵս֮-TxClient
³¡¾°¼ò½é
ABÁ½¸ö·þÎñ£¬A£¨producer£©·þÎñµ÷ÓÃB£¨consumer£©·þÎñÍê±Ïºó£¬Å׳öÒì³££¬B·þÎñÄܻعö£¬È·±£Ãݵȡ£
AB»·¾³£º£ÍybatisPlus£¬Erueka£¬Feign£¬ÕâЩ¾ßÌå¾Í²»Ï¸½²ÁË
·þÎñ½á¹¹

producer ·þÎñ
Pom.xml
<?xml version="1.0"
encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent
from repository -->
</parent>
<groupId>com.glj</groupId>
<artifactId>producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>producer</name>
<modelVersion>4.0.0</modelVersion>
<description>Demo project for Spring Boot
</description>
<properties>
<project.build.sourceEncoding>UTF-8 </project.build.
sourceEncoding>
<project.reporting.outputEncoding>UTF-8
</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<codingapi.txlcn.version>5.0.2.RELEASE
</codingapi.txlcn.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web </artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test </artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0-jre</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- mybatis-plus begin -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
<exclusions>
<exclusion>
<artifactId>org.mapstruct</artifactId>
<groupId>mapstruct</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tc</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-txmsg-netty</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> |
application.yml
spring:
application:
name: spring-cloud-producer
datasource:
url: jdbc:mysql://127.0.0.1:3306/spring_cloud_app?
serverTimezone=GMT%2B8&characterEncoding=utf-8
password: root
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 127.0.0.1
port: 6379
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://glj:glj@127.0.0.1:2100/eureka/
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ipAddress}:
${server.port}
#swagger
swagger2:
enable: true
tx-lcn:
client:
manager-address: 127.0.0.1:8070
|
·þÎñÈë¿Ú
package com.glj.producer;
import com.codingapi.txlcn.tc.config. EnableDistributed
Transaction;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.
SpringBootApplication;
import org.springframework.cloud.client.discovery.
EnableDiscoveryClient;
import org.springframework.cloud.openfeign.
EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableDistributedTransaction
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class,
args);
}
} |
.
package com.glj.producer.business.service.impl;
import com.baomidou.mybatisplus.extension.service.
impl.ServiceImpl;
import com.codingapi.txlcn.tc.annotation.LcnTransaction;
import com.glj.producer.business.entity.UserPo;
import com.glj.producer.business.mapper.UserMapper;
import com.glj.producer.business.service.IUserService;
import com.glj.producer.client.ConsumerUserClinet;
import com.glj.producer.dto.ProducerRequst;
import com.google.common.base.Preconditions;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory. annotation.
Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.
Transactional;
/**
* <p>
* ·þÎñʵÏÖÀà
* </p>
*
* @author gaoleijie
* @since 2019-05-21
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl
<UserMapper, UserPo> implements IUserService
{
@Autowired
private ConsumerUserClinet consumerUserClinet;
@Autowired
private IUserService userService;
/**
* ʹÓ÷ֲ¼Ê½ÊÂÎñ
* @param requst
* @return
*/
@Override
@LcnTransaction
@Transactional
public String aTob(ProducerRequst requst) {
log.info("¿ªÊ¼µ÷ÓÃB·þÎñ");
Boolean res = consumerUserClinet.saveUser(requst
.getNickName(),requst.getId());
log.info("B·þÎñreturn result{}",res);
UserPo userPo = userService.getById(requst.getId());
userPo.setUserName(requst.getNickName());
userService.saveOrUpdate(userPo);
Preconditions.checkArgument (StringUtils.isNotBlank
(requst.getExFlag()),"exFlag is null");
if(res) {
return "scuess";
} else {
return "false";
}
}
/**
* δʹÓ÷ֲ¼Ê½ÊÂÎñ
* @param requst
* @return
*/
@Override
@Transactional
public String aTob1(ProducerRequst requst) {
log.info("¿ªÊ¼µ÷ÓÃB·þÎñ");
Boolean res = consumerUserClinet.saveUser1 (requst.getNickName(),requst.getId());
log.info("B·þÎñreturn result{}",res);
UserPo userPo = userService.getById(requst.getId());
userPo.setUserName(requst.getNickName());
userService.saveOrUpdate(userPo);
Preconditions.checkArgument (StringUtils.isNotBlank
(requst.getExFlag()),"exFlag is null");
if(res) {
return "scuess";
} else {
return "false";
}
}
}
|
-
package com.glj.producer.business.controller;
import com.glj.producer.business.service.IUserService;
import com.glj.producer.dto.ProducerRequst;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* ǰ¶Ë¿ØÖÆÆ÷
* </p>
*
* @author gaoleijie
* @since 2019-05-21
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@ApiOperation(value = "A ·þÎñµ÷ÓÃB·þÎñ£¨Ê¹Ó÷ֲ¼Ê½ÊÂÎñ£©")
@PostMapping("/aTob")
public String aTob(@RequestBody ProducerRequst
requst){
return userService.aTob(requst);
}
@ApiOperation(value = "A ·þÎñµ÷ÓÃB·þÎñ£¨Î´Ê¹Ó÷ֲ¼Ê½ÊÂÎñ£©")
@PostMapping("/aTob1")
public String aTob1(@RequestBody ProducerRequst
requst){
return userService.aTob1(requst);
}
} |
Æäʵ¾ÍÊÇÕâô¼òµ¥£¬ºËÐÄ´úÂë¾ÍÈý´¦
Ò»´¦ÊÇ·þÎñÈë¿Ú¼Ó×¢½â@EnableDistributedTransaction
Ò»´¦ÊÇservice·½·¨ÉϼÓ×¢½â @LcnTransaction
ÁíÒ»´¦ÊÇapplication.yml Ö¸¶¨ÊÂÎñÏûÏ¢¶Ë¿Ú
consumer ·þÎñ
Pom.xml
<?xml version="1.0"
encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from
repository --> </parent> <groupId>com.glj</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consumer</name> <description>Demo
project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build
.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.
outputEncoding>
<java.version>1.8</java.version>
<codingapi.txlcn.version>5.0.2.RELEASE</codingapi.txlcn.
version>
<springcloud.version>Greenwich.RELEASE</
springcloud.version>
<swagger-version>2.8.0</swagger-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker
</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter
</artifactId>
<version>3.0.6</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!-- ÓëswaggerÒ»ÆðʹÓÃ,ÐèҪעÒâ-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
<exclusions>
<exclusion>
<artifactId>org.mapstruct</artifactId>
<groupId>mapstruct</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger-version}</version>
</dependency>
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tc</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-txmsg-netty</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0-jre</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin </artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${springcloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> |
·þÎñÈë¿Ú
package com.glj.consumer;
import com.codingapi.txlcn.tc.config. Enable
DistributedTransaction;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.
SpringBootApplication;
import org.springframework.cloud.client.discovery.
EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
@EnableDistributedTransaction
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication. class,
args);
}
} |
package com.glj.consumer.business.service.impl;
import com.baomidou.mybatisplus.extension.
service.impl.ServiceImpl;
import com.codingapi.txlcn.tc.annotation. LcnTransaction;
import com.glj.consumer.business.entity. SysUserPo;
import com.glj.consumer.business.mapper. SysUserMapper;
import com.glj.consumer.business.service. ISysUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.
Transactional;
/**
* <p>
* ·þÎñʵÏÖÀà
* </p>
*
* @author gaoleijie
* @since 2019-05-21
*/
@Service
public class SysUserServiceImpl extends ServiceImpl
<SysUserMapper, SysUserPo> implements
ISysUserService {
/**
* LCNʵÏÖ·Ö²¼Ê½ÊÂÎñ
* @param nickName
* @param Id
* @return
*/
@Override
@Transactional
@LcnTransaction
public Boolean saveUser(String nickName,Long
Id){
SysUserPo user = this.getById(Id);
user.setNickname(nickName);
return this.saveOrUpdate(user);
}
/**
* δʵÏÖ·Ö²¼Ê½ÊÂÎñ
* @param nickName
* @param Id
* @return
*/
@Override
@Transactional
public Boolean saveUser1(String nickName,Long
Id){
SysUserPo user = this.getById(Id);
user.setNickname(nickName);
return this.saveOrUpdate(user);
}
} |
»¹ÊÇÄǾ仰£¬¾ÍÕâô¼òµ¥£¬¸úÉú²úÕßͬÑùÈý´¦


Ч¹û
½á¹û±íÃ÷ʹÓ÷ֲ¼Ê½ÒÔºó£¬Òì³£ºóÊý¾Ý»Ø¹ö
ûÓÐʹÓ÷ֲ¼Ê½£¬Òì³£ºó£¬ABÊý¾Ý²»Ò»ÖÂ
|