dubbo 從2.6 升級到2.7
參考:https://www.cnblogs.com/cdfive2018/p/11245036.html
dubbo官網:http://dubbo.apache.org/zh-cn/docs/user/versions/version-270.html
-
修改 dubbo 依賴,完成dubbo 升級
<properties> <dubbo.version>2.7.4.1</dubbo.version> </properties> <dependencyManagement> <dependencies> <!--SpringBoot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- dubbo 依賴 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- nacos 依賴 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.3</version> </dependency> </dependencies> </dependencyManagement>
-
如果不修改任何代碼,也可以編譯通過,只是會提示:com.alibaba.dubbo.config.annotation.* 已棄用。
-
但是要想跑起來,還需要做如下修改:
-
1.包名修改,將 com.alibaba.dubbo 改成 org.apache.dubbo, 會涉及到3個地方
// 如果不修改Reference ,則無法 create bean import com.alibaba.dubbo.config.annotation.Reference; import org.apache.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.annotation.Service; import org.apache.dubbo.config.annotation.Service; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-
2.解決循環引用的問題: ‘AServiceImpl’ has been injected into other beans [bServiceImpl] in its raw version as part of a **circular reference **
- 在 AServiceImpl 前添加 @Lazy 註解 ,即可解決循環引用的問題
-
3.解決 Failed to create adaptive(適應的) instance 的問題,此問題由raincat 引起
// 錯誤內容如下: An attempt was made to call a method that does not exist ... The method's class, com.alibaba.dubbo.common.logger.LoggerAdapter, is available from the following locations: jar:file:/Users/howard/.m2/repository/org/apache/dubbo/dubbo/2.7.4.1/dubbo-2.7.4.1.jar!/com/alibaba/dubbo/common/logger/LoggerAdapter.class jar:file:/Users/howard/.m2/repository/com/alibaba/dubbo/2.5.3/dubbo-2.5.3.jar!/com/alibaba/dubbo/common/logger/LoggerAdapter.class It was loaded from the following location: file:/Users/howard/.m2/repository/org/apache/dubbo/dubbo/2.7.4.1/dubbo-2.7.4.1.jar Action: Correct the classpath of your application so that it contains a single, compatible version of com.alibaba.dubbo.common.logger.LoggerAdapter Exception in thread "DubboShutdownHook" java.lang.IllegalStateException: Failed to create adaptive instance: java.lang.IllegalStateException: Can't create adaptive extension interface org.apache.dubbo.common.extension.ExtensionFactory, cause: Extension instance ...
// 從以上錯誤內容可以看出存在兩個版本的dubbo , 分別是2.5.3 和 2.7.4.1 ,其中 2.5.3 是由raincat 2.0.0 引入的。嘗試升級raincat 版本到 2.0.1,就解決了兩個dubbo版本的問題。注意:需要將raincat的註解的命名空間修改正確即可。 import org.dromara.raincat.core.annotation.TxTransaction; import org.dromara.raincat.annotation.TxTransaction;
-
-
4.解決 raincat init error 問題,raincat init exception:tx transaction ex:{}:Please check your configuration
- 從github上的raincat 文檔,查到raincat 還不支持 dubbo 2.7版本,
- 解決辦法只能是:棄用raincat,使用其他的分佈式事務代替raincat 。