springboot+dubbo+nacos,启动报错
如若遇到报错:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uploadController': Injection of @DubboReference dependencies is failed; nested exception is java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Class。
经过实力踩坑,然后搭梯子了解到,该bug引起的原因是:
服务端启动的时候 服务端用的是dubbo自带的ServiceClassPostProcessor 这个类里面getAnnotationAttributes()方法中传进去的classValuesAsString参数是false 这样 @DubboService里面的interfaceClass是void.class是类对象 但是消费者端的@DubboReference被spring-context-support-1.0.11中的AbstractAnnotationBeanPostProcessor这个类解析了 这个类里面getAnnotationAttributes() 方法传进去的参数是true,这样会导致void.class变成字符串 最后在返回的时候 因为接收DubboAnnotationUtils中95行直接使用Class<?>这个类来接收 就会导致报错
解决办法
具体方法就是升级dubbo的版本到2.7.13目前解决了这个问题
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.13</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.13</version>
</dependency>
以上这两个依赖我都升级了2.7.13,具体我也没看,为了省事,应该是升级某一个就能使。