问题:在搭建分布式事务seata版本时报错,提示 NotSupportYetException: not support register type: null;从异常提示可以看出应该是版本兼容问题
Exception in thread "main" io.seata.common.exception.NotSupportYetException: not support register type: null
at io.seata.config.ConfigurationFactory.buildConfiguration(ConfigurationFactory.java:80)
at io.seata.config.ConfigurationFactory.getInstance(ConfigurationFactory.java:65)
at io.seata.server.metrics.MetricsManager.init(MetricsManager.java:49)
at io.seata.server.Server.main(Server.java:56)
Caused by: java.lang.IllegalArgumentException: illegal type:null
at io.seata.config.ConfigType.getType(ConfigType.java:62)
at io.seata.config.ConfigurationFactory.buildConfiguration(ConfigurationFactory.java:78)
那么检查pom.xml
文件,发现版本是SpringCloudAlibaba-2.1.0
, seata
版本是seata-0.9.0
,但是此时引入seata-0.9.0
版本引入不了@GlobalTransactional
注解,所以果断升级seata-1.3.0
版本,就可以使用@GlobalTransactional
注解,但是在启动时项目时却报出上述异常信息。
注意:为什么果断升级
seata-1.3.0
?
因为官方文档最新显示seata-1.3.0
,截图所示:
重新引入seata-1.3.0
,如下所示:
<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-all</artifactId>
<version>1.3.0</version>
</dependency>
结果启动项目还是出现如下错误 not support register type: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'globalTransactionScanner' defined in class path resource [com/alibaba/cloud/seata/GlobalTransactionAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.seata.spring.annotation.GlobalTransactionScanner]: Factory method 'globalTransactionScanner' threw exception;
nested exception is io.seata.common.exception.NotSupportYetException: not support register type: null
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
最后试了很多个包发现还是依旧是报出这问题,最后看seata官方文档,发现了在seata-0.9.0
版本之后用引入jar
包的方式变了,需要引入spring-cloud-starter-alibaba-seata
即可;这个引入的方式就有点像SpringBoot
整合MyBatis
,需要引入mybatis-spring-boot-starter
,如果是引入mybatis-spring
就非常需要注意版本号,一不小心就容易出现版本不兼容或者某个工厂类找不到。
从
seata
官方变更记录就可以看出这个引入jar
包的方式前后变化:
使用starter
方式重新引入seata
包,如下所示:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
当引入完这个seata-1.3.0
版本之后,依旧还是报出上述问题,最后没得办法还得继续百度搜索,最后发现原来所有答案人家官方文档组件版本说明都已经说的明明白白。各个组件之间需要兼容的什么样的版本号。
▶以后还是尽量先看官网文档,能点都点进去看!
alibaba
各组件版本兼容如下所示(第一列和最后一列就是seata
与alibaba
兼容的版本号):
从上面版本号可以看出,seata-1.3.0
版本最少也得使用SpringCloudAlibaba-2.2.3
起步,所以将SpringCloudAlibaba
升级一个稳定版本,最后试了一下SpringCloudAlibaba-2.2.1
版本其实也兼容seata-1.3.0
,因为现在SpringCloudAlibaba
官网推荐使用版本号是,所以最后决定是用的是SpringCloudAlibaba-2.2.1
版本。
一打开
SpringCloudAlibaba
官方文档显示最新的就是2.2.1RELEASE
版本,用这个版本毋庸置疑。
最后也看下SpringBoot
、SpringCloud
、SpringCloudAlibaba
三个的版本使用兼容,如下所示: