坑1 no available service ‘default’ found
i.s.c.r.netty.NettyClientChannelManager : no available service 'null' found, please make sure registry config correct
或
no available service 'default' found, please make sure registry config correct
這個問題的原因是沒有找到 seata-server ;
1.確認自己seata-server啓動了
2.確認客戶端啓動的時候連接配置是正確的
例如:seata-server
選擇的註冊中心是redis; 配置 cluster=default
註冊成功之後看看redis的值
確認客戶端的配置是正確的
如果上面都正確,但是還是有問題,請確認一下自己是不是手動配置了 GlobalTransactionScanner
,確認一下配置的txServiceGroup參數是否跟跟配置一樣;如下
坑2 com.alibaba.nacos.api.exception.NacosException
Seata 使用註冊中心的時候用的是Nacos,啓動報錯
Caused by: java.lang.ClassNotFoundException: com.alibaba.nacos.api.exception.NacosException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_221]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_221]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_221]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_221]
... 39 common frames omitted
Seata-All 在引入相應的jar包的時候都是 <scope>provide</scope>
說明我們要引入對應的依賴纔行; 按需引入;
同理 如果用的是Redis的註冊中心也要引入redis的客戶端
<!-- 如果註冊中心選擇的是nacos 需要引入下面的包-->
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 如果註冊中心選擇了redis 則需要依賴下面的-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
坑3 NotSupportYetException: not support register type: null
在引入seata的過程中,啓動的時候報如下的錯誤
nested exception is io.seata.common.exception.NotSupportYetException:
not support register type: null
io.seata.common.exception.ShouldNeverHappenException:
Can't find any object of class org.springframework.context.ApplicationContext
他的原因就是SpringApplicationContextProvider沒有被執行到
因爲我的是用seata-spring-boot-starter
方式啓動的;然後又手賤配置了GlobalTransactionScanner
那麼這個GlobalTransactionScanner
開始加載的時候,SpringApplicationContextProvider
並沒有被執行;GlobalTransactionScanner
需要依賴於SpringApplicationContextProvider
, 所以報錯了
解決方法: seata-spring-boot-starter
方式啓動已經自動加載了GlobalTransactionScanner
見SeataAutoConfiguration
如果一定要自己手動加載的話 ,請加上註解
@DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER})
但是,沒有必要手動配置
配置 GlobalTransactionScanner,使用 seata-all 時需要手動配置,使用 seata-spring-boot-starter 時無需額外處理。
坑4 can not register RM,err:can not connect to services-server.
之前一直好好的,過幾天啓動就報這個錯了,後來我看了一下注冊中心,註冊了好幾個ip;
都是之前註冊過的,不知道爲啥沒有被清理;
io.seata.common.exception.FrameworkException:
can not register RM,err:can not connect to services-server.
解決方案 :把key刪掉重新啓動 seata-server
坑5 Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder
接入Seata的時候 有報下面的錯誤
java.lang.NoClassDefFoundError:
Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder
表面上看起來是那個異常,但是你打個斷點進去查看會發現最終的異常是下面這個
java.lang.NoClassDefFoundError:
com/fasterxml/jackson/databind/ObjectMapper
解決方案:加入jackson-databind依賴就行
<!-- undo序列化方式 選擇了哪個就要依賴哪個jar包-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>