seata配合oracle使用经验
说明:
版本:
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
上一篇: 差点我就招了
推荐阅读
-
Oracle数据库系统使用经验六则
-
Oracle大批量更新数据操作需要使用COMMIT语句(Use commit statement after updating database)的调试经验分享
-
使用Oracle BETWEEN函数限定查询结果的时间范围(LimitdatarangeinOracle)的调试经验分享
-
Oracle数据库系统使用总结的几条经验分享
-
使用Oracle的instr函数与索引配合提高模糊查询的效率
-
使用Oracle REPLACE函数替换查询结果中的指定字符(ReplacesubstringinOracle)的调试经验分享
-
seata配合oracle使用经验
-
Oracle数据库系统使用经验六则
-
Linux下使用Oracle和WebLogic的一点经验
-
Linux下使用Oracle和WebLogic经验总结