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.cloud spring-cloud-starter-alibaba-seata io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter 1.4.2
本案例的操作是在: https://mp.csdn.net/mp_blog/creation/editor/129052158 seata搭建服务之后的进行操作。
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java com.alibaba.cloud spring-cloud-starter-alibaba-seata io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter 1.4.2 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.apache.commons commons-lang3 3.4 com.fasterxml.jackson.core jackson-core com.fasterxml.jackson.core jackson-databind com.fasterxml.jackson.datatype jackson-datatype-joda 2.9.6 com.fasterxml.jackson.module jackson-module-parameter-names com.github.pagehelper pagehelper-spring-boot-starter 1.2.5 com.alibaba druid-spring-boot-starter 1.1.9
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
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("服务启动成功!!!!!!!");}
}
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';
1.启动nacos,再启动seata
2.最后启动工程
1.请求地址: http://localhost:7004/addInfo?orderName=juzi&orderNo=240
页面不停的刷新,查看数据库,也没有入到库中
后台日志:
2.将
@GlobalTransactional(name = "save-funds", rollbackFor = Exception.class) 注解注释掉,再次访问
刷新地址,多次访问:
可以看到后台报错,没有事务回滚,报错数据也入到库中了
上一篇:C++021-C++二分查找
下一篇:2020-复习