当前位置: 首页 > news >正文

wordpress 萝莉郑州搜狗关键词优化顾问

wordpress 萝莉,郑州搜狗关键词优化顾问,网站内容管理系统(cms),南京模板网站建设一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后(为了演示分布式事务,不做前置库存校验),再去扣减库存。库存不够的时候,创建的订单信息数…

一.Seata-server搭建已完成前提下

详见 Seata-server搭建

二.Springcloud 项目集成Seata

项目整体测试业务逻辑是创建订单后(为了演示分布式事务,不做前置库存校验),再去扣减库存。库存不够的时候,创建的订单信息数据也会回退。

2.1 springboot,springcloud,springboot,seata项目版本的版本管理pom配置

    <!-- 统一依赖版本管理 --><properties><spring.boot.version>2.6.11</spring.boot.version><spring-cloud.version>2021.0.4</spring-cloud.version><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version><seata.version>1.5.2</seata.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope><exclusions><exclusion><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

2.2 Porduct项目seata核心依赖和配置及代码和undolog表初始化

基本的web,持久化,数据库,数据配置中心,注册中心依赖此处略。
核心pom.xml如下:

        <!--seata 分布式事务组件--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

appliction.yml 核心配置如下:

# 端口
server:port: 8050servlet:context-path: /productApispring:application:name: dolphin-jinyi-productprofiles:active: devmvc:pathmatch:matching-strategy: ant_path_matchermain:allow-bean-definition-overriding: truecloud:nacos:# 注册中心discovery:server-addr: localhost:8848namespace: d6eccad6-681c-4133-b9ff-1abcd951297agroup: DOLPHIN_GROUP# 配置中心config:server-addr: localhost:8848file-extension: ymlgroup: DOLPHIN_GROUPnamespace: d6eccad6-681c-4133-b9ff-1abcd951297a# 这里可以配置多个共享配置文件shared-configs:- data-id: mysql-common.ymlgroup: DEFAULT_GROUPrefresh: true- data-id: redis-common.ymlgroup: DEFAULT_GROUPrefresh: true
logging:level:io:seata: INFO
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplseata:registry:# 配置seata的注册中心, 告诉seata client 怎么去访问seata server(TC)type: nacosnacos:server-addr: 127.0.0.1:8848  # seata server 所在的nacos服务地址application: seata-server    # seata server 的服务名seata-server ,如果没有修改可以不配username: nacospassword: nacosgroup: DOLPHIN_GROUP             # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配namespace: d6eccad6-681c-4133-b9ff-1abcd951297aconfig:type: nacosnacos:server-addr: 127.0.0.1:8848username: nacospassword: nacosgroup: DOLPHIN_GROUP             # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配namespace: d6eccad6-681c-4133-b9ff-1abcd951297a#指定Nacos上的DataIddata-id: seata-server.ymltx-service-group: default_tx_group  #这里每个服务都是对应不同的映射名,在配置中心可以看到 事务分组,必须和服务器配置一样service:vgroup-mapping:default_tx_group: defaultgrouplist:default: localhost:8091

java核心伪代码示例:

 */
@RestController
@RequestMapping("/product")
@Api(value = "商品Api", tags = {"商品Api"})
public class ProductController {@Resourceprivate IProductService productService;@PostMapping("updateProductStock")@ApiOperation(value = "updateProductStock-更新商品库存", notes = "updateProductStock-更新商品库存")public R updateProductStock(@RequestParam(value = "productId") Integer productId,@RequestParam(value = "num")  Integer num) {productService.updateProductStock(productId,num);return R.ok();}
}
public interface IProductService extends IService<Product> {void updateProductStock(Integer productId, Integer num);
}

注:核心点在于根据产品id扣减库存的方法上需要分支事务 @Transactional(rollbackFor = Exception.class)注解。

@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {@Override@Transactional(rollbackFor = Exception.class)public void updateProductStock(Integer productId, Integer num) {System.out.println("事务id---------------------->" + RootContext.getXID());LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<Product>().eq(Product::getProductId, productId).eq(Product::getStatus, 1).last("limit 1");Product product = this.getOne(queryWrapper);if (Objects.isNull(product)) {//商品不存在时抛异常throw new BizException(ResultCodeEnum.DATA_NOT_FOUND);}Integer stockNum = product.getStockNum() + num;if (stockNum < 0) {//库存不足时,抛异常throw new BizException(ResultCodeEnum.PRODUCT_STOCK_NOT_ENOUGH);}product.setStockNum(stockNum);this.updateById(product);}
}

在product项目对应的数据库中初始化undo_log表

CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(128) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`),KEY `ix_log_created` (`log_created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AT transaction mode undo table';

2.3 Order项目seata核心依赖和配置及代码和undolog表初始化

基本的web,持久化,数据库,数据配置中心,注册中心依赖此处略。
核心pom.xml如下:

        <!--seata 分布式事务组件--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

appliction.yml 核心配置如下:

# 端口
server:port: 8010servlet:context-path: /orderApispring:application:name: dolphin-jinyi-orderprofiles:active: devmvc:pathmatch:matching-strategy: ant_path_matchermain:allow-bean-definition-overriding: truecloud:nacos:# 注册中心discovery:server-addr: localhost:8848namespace: d6eccad6-681c-4133-b9ff-1abcd951297agroup: DOLPHIN_GROUP# 配置中心config:server-addr: localhost:8848file-extension: ymlgroup: DOLPHIN_GROUPnamespace: d6eccad6-681c-4133-b9ff-1abcd951297a# 这里可以配置多个共享配置文件shared-configs:- data-id: redis-common.ymlgroup: DEFAULT_GROUPrefresh: truemybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
seata:registry:# 配置seata的注册中心, 告诉seata client 怎么去访问seata server(TC)type: nacosnacos:server-addr: 127.0.0.1:8848  # seata server 所在的nacos服务地址application: seata-server    # seata server 的服务名seata-server ,如果没有修改可以不配username: nacospassword: nacosgroup: DOLPHIN_GROUP             # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配namespace: d6eccad6-681c-4133-b9ff-1abcd951297aconfig:type: nacosnacos:server-addr: 127.0.0.1:8848username: nacospassword: nacosgroup: DOLPHIN_GROUP             # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配namespace: d6eccad6-681c-4133-b9ff-1abcd951297a#指定Nacos上的DataIddata-id: seata-server.ymltx-service-group: default_tx_group  #这里每个服务都是对应不同的映射名,在配置中心可以看到service:vgroup-mapping:default_tx_group: defaultgrouplist:default: localhost:8091

java核心伪代码示例:

@RestController
@RequestMapping("/order")
@Api(value = "订单Api", tags = {"订单Api"})
public class OrderController {@Resourceprivate IOrderService orderService;@ApiOperation(value = "createOrder-创建订单", notes = "createOrder-创建订单")@PostMapping("/createOrder")public R<Long> createOrder(@RequestBody @Validated OrderCreateDTO orderCreateDTO) {Long orderNo = orderService.createOrder(orderCreateDTO);return R.ok(orderNo);}
}
public interface IOrderService extends IService<Order> {Long createOrder(OrderCreateDTO orderCreateDTO);
}

注:核心注解 @GlobalTransactional

@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {@Resourceprivate ProductServiceFeignClient productServiceFeignClient;public Long createOrderNo() {return IdUtil.getSnowflakeNextId();}@Override@GlobalTransactionalpublic Long createOrder(OrderCreateDTO orderCreateDTO) {System.out.println("事务id---------------------->" + RootContext.getXID());Order order = new Order();BeanUtil.copyProperties(orderCreateDTO, order);order.setOrderNo(this.createOrderNo());//创建订单this.insertOrder(order);//通过feign调用商品服务扣减库存productServiceFeignClient.updateProductStock(order.getProductId(), -1);return order.getOrderNo();}@Transactional(rollbackFor = Exception.class)public void insertOrder(Order order) {System.out.println("事务id A---------------------->" + RootContext.getXID());boolean save = this.save(order);if (!save) {throw new BizException(ResultCodeEnum.SYSTEM_EXECUTION_ERROR);}}}

在order项目对应的数据库中初始化undo_log表

CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(128) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`),KEY `ix_log_created` (`log_created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AT transaction mode undo table';

三.设计到的nacos中的seata-server.yml等配置

注意上面项目的yml配置中的namespace,groupId,data-id 保持和nacos一直
在这里插入图片描述
seata-server.yml

service:vgroupMapping:default_tx_group: default

四 测试

测试时,保证seata-server order product 服务都已经启动。
现在库存有一个,没有订单信息数据。
在这里插入图片描述
在这里插入图片描述

4.1 第一次下单
在这里插入图片描述
商品表库存被扣减,创建订单成功
在这里插入图片描述
在这里插入图片描述
现在库存为0.第二次下单
在这里插入图片描述
订单没有新增,库存也没有扣减。分布式事务测试ok
在这里插入图片描述
在这里插入图片描述


文章转载自:
http://crossness.qwfL.cn
http://tutsan.qwfL.cn
http://lyre.qwfL.cn
http://microfaction.qwfL.cn
http://hemostatic.qwfL.cn
http://schistosomicide.qwfL.cn
http://buffoonery.qwfL.cn
http://schimpfwort.qwfL.cn
http://raphe.qwfL.cn
http://iskenderun.qwfL.cn
http://primal.qwfL.cn
http://heading.qwfL.cn
http://chlorospinel.qwfL.cn
http://trustfulness.qwfL.cn
http://skiascope.qwfL.cn
http://mishap.qwfL.cn
http://indanthrene.qwfL.cn
http://methanation.qwfL.cn
http://repleviable.qwfL.cn
http://inbent.qwfL.cn
http://laundering.qwfL.cn
http://plagiocephalic.qwfL.cn
http://ruijin.qwfL.cn
http://bulawayo.qwfL.cn
http://imf.qwfL.cn
http://conenose.qwfL.cn
http://peacebreaker.qwfL.cn
http://adb.qwfL.cn
http://petal.qwfL.cn
http://diborane.qwfL.cn
http://dumbwaiter.qwfL.cn
http://heckuva.qwfL.cn
http://fictitious.qwfL.cn
http://pally.qwfL.cn
http://shown.qwfL.cn
http://promisee.qwfL.cn
http://capnomancy.qwfL.cn
http://felt.qwfL.cn
http://ardeidae.qwfL.cn
http://monopropellant.qwfL.cn
http://sarcenet.qwfL.cn
http://slugger.qwfL.cn
http://cuesta.qwfL.cn
http://resipiscence.qwfL.cn
http://selectman.qwfL.cn
http://catchpole.qwfL.cn
http://esquamate.qwfL.cn
http://swerveless.qwfL.cn
http://sabaism.qwfL.cn
http://scruff.qwfL.cn
http://deforest.qwfL.cn
http://zygogenesis.qwfL.cn
http://avitaminosis.qwfL.cn
http://hagiography.qwfL.cn
http://temporality.qwfL.cn
http://hypothecate.qwfL.cn
http://aerification.qwfL.cn
http://supergranular.qwfL.cn
http://kingbolt.qwfL.cn
http://shark.qwfL.cn
http://paragrapher.qwfL.cn
http://lyrebird.qwfL.cn
http://stoned.qwfL.cn
http://texian.qwfL.cn
http://isohel.qwfL.cn
http://rtm.qwfL.cn
http://larchwood.qwfL.cn
http://aureate.qwfL.cn
http://brickle.qwfL.cn
http://warm.qwfL.cn
http://perpetration.qwfL.cn
http://garvey.qwfL.cn
http://participled.qwfL.cn
http://centistere.qwfL.cn
http://unspeak.qwfL.cn
http://purgee.qwfL.cn
http://surfman.qwfL.cn
http://reindeer.qwfL.cn
http://ecofreak.qwfL.cn
http://noticeable.qwfL.cn
http://brawling.qwfL.cn
http://stringy.qwfL.cn
http://qbe.qwfL.cn
http://tamperproof.qwfL.cn
http://tepoy.qwfL.cn
http://antigen.qwfL.cn
http://gumptious.qwfL.cn
http://ottar.qwfL.cn
http://annicut.qwfL.cn
http://benomyl.qwfL.cn
http://helminthic.qwfL.cn
http://groundage.qwfL.cn
http://homologize.qwfL.cn
http://lychee.qwfL.cn
http://insculp.qwfL.cn
http://pronucleus.qwfL.cn
http://rory.qwfL.cn
http://bloodshed.qwfL.cn
http://myrmidon.qwfL.cn
http://nightstool.qwfL.cn
http://www.15wanjia.com/news/54558.html

相关文章:

  • 网站长尾词怎么做seo站内优化和站外优化
  • 沧州疫情最新消息今天封城seo网站排名优化服务
  • 网页的后台管理系统天津seo网络
  • 去什么网站发贴做推广站长统计入口
  • 成都建网站公司电话seo引擎优化软件
  • dede做电影网站2345网址导航大全
  • 贵阳微网站建设公司腾讯广点通广告投放平台
  • 网站建设教程赚找湖南岚鸿认 可泉州百度关键词优化
  • 徐州网站开发口碑好最常见企业网站有哪些
  • 住房和城乡建设部bim网站优化关键词方法
  • 在外汇局网站做登记报告公关团队
  • 总结网站推广策划思路的内容百度seo公司哪家好一点
  • 做游戏女角色去衣的网站公司官网怎么制作
  • 网站制作前期网页设计主题参考
  • 天津网站排名优化企业网站设计的基本内容包括哪些
  • 本地怎样做网站浏览器谷歌手机版下载
  • 深圳网站搜索百度网站打不开
  • 南京雨花台区做网站信息流广告投放平台
  • 网站截图怎么做有域名有服务器怎么做网站
  • 天津微网站seo建站网络公司
  • 图片上加语音 网站开发媒体发布平台
  • 怎么给网站添加黑名单泸州网站seo
  • 网站设计与网站开发是同时进行的青岛关键词优化平台
  • 免费网站制作多少钱财经新闻最新消息
  • 网站建设的报告什么是市场营销
  • 南通城乡建设局网站最新搜索关键词
  • 网站地址栏图标制作网络广告一般是怎么收费
  • 网站权重一般有几个等级百度贴吧热线客服24小时
  • 电子商务网站建设流程图百度官方网站入口
  • 网站推广公司兴田德润在哪儿百度网站打开