版本:
oracle 11g
seata 1.3.0 目前最新版
springcloud版本配置
org.springframework.boot
spring-boot-dependencies
2.2.2.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.0.RELEASE
pom
import
问题1 seata 1.3.0之前不支持oracle 新增时插入sysdate
问题2 报错ERROR i.s.r.d.u.p.JacksonUndoLogParser - json encode exception, No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: io.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[1]->io.seata.rm.datasource.undo.SQLUndoLog["afterImage"]->io.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->io.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[6]->io.seata.rm.datasource.sql.struct.Field["value"]->oracle.sql.TIMESTAMP["stream"])
默认的日志序列化程序不可用, jackson 的新特性找不到,Seata 要求 jackson 版本2.9.9+,但是使用 jackson 2.9.9+ 版本会导致Spring Boot中使用的jackson API找不到,也就是jackson本身的向前兼容性存在问题。因此,建议大家将Seata的序列化方式切换到非 jackson 序列化方式,比如 kryo,配置项为client.undo.logSerialization = "kryo"
问题3 修改为kryo之后报错:NoClassDefFoundError: com/esotericsoftware/kryo/pool/KryoFactory;
添加kryo的maven依赖
2.24.0
0.45
4.0.2
com.esotericsoftware.kryo
kryo
{kryo-kryo.version}
de.javakaffee
kryo-serializers
{kryo-serializers.version}
com.esotericsoftware
kryo
{kryo.version}
需要添加response,我是在maven,https://mvnrepository.com/search?q=kryo上下载之后,添加到nexus;
问题4连接不上seata server
异常:no available service 'null' found, please make sure registry config correct
1.我更换seata版本导致,原来用的seata1.0升级到seata1.3.0,需要更换jar,修改yml配置
pom
com.alibaba.cloud
spring-cloud-starter-alibaba-seata
seata-all
io.seata
io.seata
seata-spring-boot-starter
1.3.0
yml 注意nacos配置,需要特别注意的是1.0.0 版本配置项 seata.service .vgroup-mapping=default 1.1.0 更改为: seata.service.vgroupMapping .my_test_tx_group=default,其中my_test_tx_group代表程序所使用的事务分组
file.conf配置
registry配置
问题5 xid向下传递,A访问B访问C,在B,C上
GlobalTransactionContext.getCurrentOrCreate().getXid()获取不到xid
解决方法:查看官网解决了问题,因为我继承了WebMvcConfigurerAdapter,所以需要添加SeataHandlerInterceptor
我的适配器
@Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SeataHandlerInterceptor()).addPathPatterns("/**");
}}
注意:提示我找不到SeataHandlerInterceptor类,因为我开始没引入
spring-cloud-starter-alibaba-seata jar,需要把spring-cloud-starter-alibaba-seata和seata-spring-boot-starter都引入进来
问题6:使用FeignClient,数据不回滚
解决方法:我在FeignClient上设置了fallback之后,系统不报异常了,所以不回滚