seata配合oracle使用经验

说明:

  版本:

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

seata配合oracle使用经验_第1张图片

问题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"

seata配合oracle使用经验_第2张图片

问题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代表程序所使用的事务分组

seata配合oracle使用经验_第3张图片

file.conf配置

seata配合oracle使用经验_第4张图片

registry配置

seata配合oracle使用经验_第5张图片

问题5 xid向下传递,A访问B访问C,在B,C上

GlobalTransactionContext.getCurrentOrCreate().getXid()获取不到xid

解决方法:查看官网解决了问题,因为我继承了WebMvcConfigurerAdapter,所以需要添加SeataHandlerInterceptor

seata配合oracle使用经验_第6张图片

我的适配器

@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之后,系统不报异常了,所以不回滚

seata配合oracle使用经验_第7张图片

本人微信号 lxy1993-2019 ,欢迎交流技术;

你可能感兴趣的:(springcloud,spring)