springcloud3 Seata客户端的编写测试事务的性能2
迪丽瓦拉
2025-05-31 13:28:17
0

一  软件版本的介绍

1.1 软件版本介绍

1.springboot 2.3.2.

2.springcloud   Hoxton.SR9

3.springcloud-alibaba   2.2.6.RELEASE

 4.nacos 1.4.4

5.seata 1.4.2

6.seata pom文件的配置

    com.alibaba.cloudspring-cloud-starter-alibaba-seataio.seataseata-spring-boot-starterio.seataseata-spring-boot-starter1.4.2

1.2   说明

本案例的操作是在: https://mp.csdn.net/mp_blog/creation/editor/129052158   seata搭建服务之后的进行操作。

二  操作

2.1 工程结构

 2.2 工程搭建

2.2.1 pom文件

org.mybatis.spring.bootmybatis-spring-boot-starter1.3.2mysqlmysql-connector-javacom.alibaba.cloudspring-cloud-starter-alibaba-seataio.seataseata-spring-boot-starterio.seataseata-spring-boot-starter1.4.2com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.apache.commonscommons-lang33.4com.fasterxml.jackson.corejackson-corecom.fasterxml.jackson.corejackson-databindcom.fasterxml.jackson.datatypejackson-datatype-joda2.9.6com.fasterxml.jackson.modulejackson-module-parameter-namescom.github.pagehelperpagehelper-spring-boot-starter1.2.5com.alibabadruid-spring-boot-starter1.1.9

2.2.2 配置文件

1.application配置文件

 2.application-dev配置文件

关键信息配置

2.详情代码

# nacos配置
server:port: 7004spring:datasource:name: mysql_testtype: com.alibaba.druid.pool.DruidDataSource#druid相关配置druid:#监控统计拦截的filtersfilters: statdriver-class-name: com.mysql.jdbc.Driver#基本属性url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=trueusername: rootpassword: cloudiip#配置初始化大小/最小/最大initial-size: 1min-idle: 1max-active: 20#获取连接等待超时时间max-wait: 60000#间隔多久进行一次检测,检测需要关闭的空闲连接time-between-eviction-runs-millis: 60000#一个连接在池中最小生存的时间min-evictable-idle-time-millis: 300000validation-query: SELECT 'x'test-while-idle: truetest-on-borrow: falsetest-on-return: false#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为falsepool-prepared-statements: falsemax-pool-prepared-statement-per-connection-size: 20application:name: mb-111cloud:nacos:discovery:server-addr: localhost:8848 #Nacos服务注册中心地址#config:# server-addr: localhost:8848 #Nacos作为配置中心地址#file-extension: yaml #指定yaml格式的配置#group: DEV_GROUP_ljf#namespace: 05573840-fcf3-472d-a64a-c66b4fe878f4alibaba:seata: #设置事务分支 默认就是 my_test_tx_grouptx-service-group: default_tx_group
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.ljf.mscloud.modelconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#pagehelper
pagehelper:helperDialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSqlreturnPageInfo: check
seata:enabled: trueenable-auto-data-source-proxy: truetx-service-group: default_tx_group #此处与上面config.txt中的vgroupMapping一致registry:type: nacosnacos:application: seata-server    #服务name要和nacos中保持一致 默认就是seata-serverserver-addr: 127.0.0.1:8848  #根据自己情况调整username: nacos              #根据自己情况调整password: nacos          #根据自己情况调整cluster: defaultgroup: DEV_GROUP_ljfnamespace: 05573840-fcf3-472d-a64a-c66b4fe878f4  #根据自己情况调整config:type: nacosnacos:server-addr: 127.0.0.1:8848 #根据自己情况调整group: DEV_GROUP_ljfusername: nacos       #根据自己情况调整password: nacos         #根据自己情况调整dataId: seata-server.propertiesnamespace: 05573840-fcf3-472d-a64a-c66b4fe878f4    #根据自己情况调整service:vgroup-mapping:default_tx_group: default

2.2.3 其他业务层

1.controller

@RestController
//@RefreshScope //支持Nacos的动态刷新功能。
public class OrderController {@Autowiredprivate OrderService orderService;@RequestMapping("/stationInfo")public Object queryWsBasicInfo(){Map resultMap=new TreeMap();resultMap.put("list",orderService.queryOrderList());resultMap.put("time:",new Date());return resultMap;}@RequestMapping("/addInfo")//@GlobalTransactional//seata事务控制注解,name自定义保证唯一性@GlobalTransactional(name = "save-funds", rollbackFor = Exception.class)public Object addInfo(String orderName,String orderNo){System.out.println("==================================================name:"+orderName+" no:"+orderNo);Order order=new Order();order.setOrderName(orderName);order.setOrderNo(orderNo);int m=orderService.addInfo(order);int k=5/0;return m;}
}

2.service

public interface OrderService {public List queryOrderList();public int  addInfo(Order order);
}
@Service
public class OrderServiceImpl  implements OrderService {@Autowiredprivate OrderDao orderDao;@Overridepublic List queryOrderList() {return orderDao.queryOrderList();}@Overridepublic int addInfo(Order order) {return orderDao.addInfo(order);}
}

3.dao

@Mapper
public interface OrderDao {public List queryOrderList();public int  addInfo(Order order);
}

4.mapper



insert into tb_order values(null,#{orderName},#{orderNo})

5.启动类

@EnableDiscoveryClient
@SpringBootApplication
@EnableAutoDataSourceProxy
public class App 
{public static void main( String[] args ){SpringApplication.run(App.class, args);System.out.println("服务启动成功!!!!!!!");}
}

 2.3  附加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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='AT transaction mode undo table';

  2.4  启动服务

1.启动nacos,再启动seata

2.最后启动工程

 2.5 测试

1.请求地址: http://localhost:7004/addInfo?orderName=juzi&orderNo=240

页面不停的刷新,查看数据库,也没有入到库中

后台日志:

 2.将  

@GlobalTransactional(name = "save-funds", rollbackFor = Exception.class)  注解注释掉,再次访问

 刷新地址,多次访问:

 可以看到后台报错,没有事务回滚,报错数据也入到库中了

上一篇:C++021-C++二分查找

下一篇:2020-复习

相关内容