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

网站都需要续费网站开发技术说明文档

网站都需要续费,网站开发技术说明文档,wordpress主题模板 国人,孝感网站开发公司一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后#xff08;为了演示分布式事务#xff0c;不做前置库存校验#xff09;#xff0c;再去扣减库存。库存不够的时候#xff0c;创建的订单信息数…一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后为了演示分布式事务不做前置库存校验再去扣减库存。库存不够的时候创建的订单信息数据也会回退。 2.1 springbootspringcloudspringbootseata项目版本的版本管理pom配置 !-- 统一依赖版本管理 --propertiesspring.boot.version2.6.11/spring.boot.versionspring-cloud.version2021.0.4/spring-cloud.versionspring-cloud-alibaba.version2021.0.4.0/spring-cloud-alibaba.versionseata.version1.5.2/seata.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring.boot.version}/versiontypepom/typescopeimport/scopeexclusionsexclusiongroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement2.2 Porduct项目seata核心依赖和配置及代码和undolog表初始化 基本的web持久化数据库数据配置中心注册中心依赖此处略。 核心pom.xml如下 !--seata 分布式事务组件--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-seata/artifactId/dependencyappliction.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:8091java核心伪代码示例 */ 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 IServiceProduct {void updateProductStock(Integer productId, Integer num); }注核心点在于根据产品id扣减库存的方法上需要分支事务 Transactional(rollbackFor Exception.class)注解。 Service public class ProductServiceImpl extends ServiceImplProductMapper, Product implements IProductService {OverrideTransactional(rollbackFor Exception.class)public void updateProductStock(Integer productId, Integer num) {System.out.println(事务id---------------------- RootContext.getXID());LambdaQueryWrapperProduct queryWrapper new LambdaQueryWrapperProduct().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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENTAT transaction mode undo table;2.3 Order项目seata核心依赖和配置及代码和undolog表初始化 基本的web持久化数据库数据配置中心注册中心依赖此处略。 核心pom.xml如下 !--seata 分布式事务组件--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-seata/artifactId/dependencyappliction.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 RLong createOrder(RequestBody Validated OrderCreateDTO orderCreateDTO) {Long orderNo orderService.createOrder(orderCreateDTO);return R.ok(orderNo);} }public interface IOrderService extends IServiceOrder {Long createOrder(OrderCreateDTO orderCreateDTO); }注核心注解 GlobalTransactional Service public class OrderServiceImpl extends ServiceImplOrderMapper, Order implements IOrderService {Resourceprivate ProductServiceFeignClient productServiceFeignClient;public Long createOrderNo() {return IdUtil.getSnowflakeNextId();}OverrideGlobalTransactionalpublic 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENTAT transaction mode undo table;三.设计到的nacos中的seata-server.yml等配置 注意上面项目的yml配置中的namespacegroupIddata-id 保持和nacos一直 seata-server.yml service:vgroupMapping:default_tx_group: default四 测试 测试时保证seata-server order product 服务都已经启动。 现在库存有一个没有订单信息数据。 4.1 第一次下单 商品表库存被扣减创建订单成功 现在库存为0.第二次下单 订单没有新增库存也没有扣减。分布式事务测试ok
http://www.w-s-a.com/news/34672/

相关文章:

  • 站长网seo综合查询工具电商公司简介
  • 全能网站建设教程广告制作公司需要什么设备
  • 汽车行业做网站网站改版seo建议
  • 建设职业注册中心网站photoshop属于什么软件
  • 公司网站展示有哪些wordpress工单
  • iis新建网站seo是做什么工作的
  • 临沂网站建设厂家做外贸的女生现状
  • 电子商务网站建设实践临沂做网站的
  • 网站职能建设论文做外贸都有哪些网站
  • 网站建设项目需求分析房地产网站源码
  • 网站充值提现公司账务怎么做中国能建设计公司网站
  • 网站信息资源建设包括哪些网站网站做维护
  • 网站性能优化的方法有哪些建设施工合同网站
  • 郑州建设企业网站山西省住房和城乡建设厅网站
  • 做网站的去哪找客户正规制作网站公司
  • 网站代理访问是什么意思外国优秀设计网站
  • 合肥个人建站模板网络技术服务有限公司
  • 做网站什么公司好dw企业网站开发教程
  • 怎么做自己的个人网站宝安网站设计哪家最好
  • 浩博建设集团网站站长网站统计
  • 电商网站开发视频seo排名优化方式方法
  • 宿迁市住房城乡建设局网站wordpress纯图片主题
  • 广州建设网站 公司湖北省建设信息网官网
  • 网站建立时间查询做百度移动网站优化排
  • 网站建设和运行费用qq恢复官方网站
  • 可以免费建立网站吗免费的网络营销方式
  • 天津企业设计网站建设wordpress标题字体大小
  • 上高县城乡规划建设局网站创业项目
  • 钓鱼网站在线下载广州网站设计哪里好
  • 做阿里国际网站会有成效吗wordpress微博同步