当前位置: 移动技术网 > IT编程>开发语言>Java > seata配合oracle使用经验

seata配合oracle使用经验

2020年07月31日  | 移动技术网IT编程  | 我要评论
说明: 版本: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

 

 

问题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依赖

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

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

 

 

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

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网