谷粒商城 289-290 Seata遇到各种问题及解决方案 —— pom引入、seata版本、数据库等问题
1、首先关于Seata pom依赖问题
根据老师视频是将pom直接导入common中
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
-
问题一:
经过种种错误,我认为该坑点在于,给common中引入之后,其他所有微服务都要进行Seata的配置,和各种文件查找之类的,其他微服务启动可能会报错。- 所以应将该依赖放入每个需要的微服务中,例如:order、ware等
-
问题二:
起初从网上搜到的pom引入如下(用的是0.9.0,0.7.1有数据库批量插入问题,for依次插入即可)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>0.9.0</version>
</dependency>
我的项目接着遇到 DataSourceProxy找不到的错误
百转千回,解决为应给setat加上版本号。
最终pom文件应再各个需要的微服务上添加如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.1.0.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>0.9.0</version>
</dependency>
2、首先关于Seata 使用版本问题
- 问题一:默认seata的2.1.0.RELEASE版本对应的软件版本(seata-all)为0.7.1
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
但是0.7.1会遇到无法批量插入:at io.seata.rm.datasource.AbstractPreparedStatementProxy.addBatch
解决:将批量插入saveBatch改为for循环依次插入
//orderItemService.saveBatch(orderItems);
for (OrderItemEntity orderItem : orderItems) {
orderItemService.save(orderItem);
}
- 问题二:我用的是mysql8,无论哪个版本,都会报 Failed to fetch schema of `xxx` 的错误
解决:只需要在数据库配置文件的Url里添加useInformationSchema=false
即可
详情见:https://blog.csdn.net/L1Ha1Y1/article/details/108681489
3、结尾
至此,问题已基本解决,这是目前我遇到的问题和解决,仅供大家参考……