Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ͨ¹ýLCNʵÏÖ·Ö²¼Ê½ÊÂÎñ
 
  5175  次浏览      29
 2019-9-26
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚ 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Êý¾Ý²»Ò»ÖÂ

   
5175 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù