欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

seata配合oracle使用经验

程序员文章站 2022-06-14 22:01:17
说明: 版本:oracle 11gseata 1.3.0 目前最新版springcloud版本配置问题1 seata1.3.0之前不支持oracle 新增时插入sysdate问题2...

说明:

  版本:

oracle 11g

seata 1.3.0 目前最新版

 

springcloud版本配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.2.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Hoxton.SR1</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

问题1  seata 1.3.0之前不支持oracle 新增时插入sysdate

seata配合oracle使用经验

 

 

问题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使用经验

 

问题3 修改为kryo之后报错:NoClassDefFoundError: com/esotericsoftware/kryo/pool/KryoFactory; 

添加kryo的maven依赖

<kryo-kryo.version>2.24.0</kryo-kryo.version>
<kryo-serializers.version>0.45</kryo-serializers.version>
<kryo.version>4.0.2</kryo.version>
<dependency>
    <groupId>com.esotericsoftware.kryo</groupId>
    <artifactId>kryo</artifactId>
    <version>{kryo-kryo.version}</version>
</dependency>
<dependency>
    <groupId>de.javakaffee</groupId>
    <artifactId>kryo-serializers</artifactId>
    <version>{kryo-serializers.version}</version>
</dependency>
<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>{kryo.version}</version>
</dependency>

需要添加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

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>seata-all</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

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使用经验

file.conf配置

seata配合oracle使用经验

registry配置

seata配合oracle使用经验

 

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

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

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

seata配合oracle使用经验

我的适配器

@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使用经验

 

 

本人微信号 lxy13322402816 ,欢迎交流技术;

本文地址:https://blog.csdn.net/qq_27699835/article/details/107663452

相关标签: springcloud