在Dubbo中使用@Reference注入Bean,报找不到合格的Bean, 错误: APPLICATION FAILED TO STARTDescription:

今天出了一个非常小的问题, 就是由于自己疏忽大意, 真该给自己两巴掌.

问题: SpringBoot项目启动报错

APPLICATION FAILED TO START

Description:

A component required a bean of type 'com.aaa.dubbo.api.QuanZiApi' that could not be found.

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'com.aaa.dubbo.api.QuanZiApi' that could not be found.


Action:

Consider defining a bean of type 'com.aaa.dubbo.api.QuanZiApi' in your configuration.

服务生产者:


public interface QuanZiApi {
}
import com.alibaba.dubbo.config.annotation.Service;
import lombok.extern.slf4j.Slf4j;


@Service(version = "1.0.0")
@Slf4j
public class QuanZiApiImpl implements QuanZiApi {

}

服务消费者:

import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import com.alibaba.dubbo.config.annotation.Reference;



@Service
@Slf4j
public class QuanZiService {

    @Resource
    private PicUploadService picUploadService;

    @Reference(version = "1.0.0")
    private QuanZiApi quanZiApi;

    // 其它代码省略.................
}

启动后报错: 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-20 21:58:17.501 ERROR 28380 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'com.siri.dubbo.api.QuanZiApi' that could not be found.


Action:

Consider defining a bean of type 'com.siri.dubbo.api.QuanZiApi' in your configuration.

2024-07-20 21:58:18.396  INFO 28380 --- [bboShutdownHook] org.apache.zookeeper.ZooKeeper           : Session: 0x100059b50220007 closed
2024-07-20 21:58:18.396  INFO 28380 --- [tor-EventThread] org.apache.zookeeper.ClientCnxn          : EventThread shut down for session: 0x100059b50220007
Disconnected from the target VM, address: '127.0.0.1:34168', transport: 'socket'

Process finished with exit code 1

检查配置:

服务生产者:

# dubbo 扫描包配置
dubbo.scan.basePackages = com.siri.dubbo
dubbo.application.name = dubbo-provider-t

#dubbo 对外暴露的端口信息
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

#dubbo注册中心的配置
dubbo.registry.address = zookeeper://192.168.31.81:2181
dubbo.registry.client = zkclient
dubbo.registry.timeout = 60000 

服务消费者:

#dubbo注册中心配置
dubbo.application.name = my-server-q
#dubbo.application.name = dubbo-provider-t
dubbo.registry.address = zookeeper://192.168.31.81:2181
dubbo.registry.client = zkclient
dubbo.registry.timeout = 60000
dubbo.consumer.timeout = 60000

配置都没有问题, 注解没有问题, 启动就是报错.

解决思路:

网上百度一大堆,有关问题, 逐个检查:

1. 网络问题, 本地虚拟机, ping ,没问题

2.Linux防火墙状态关闭, 没问题

3. 检查POM文件是否有版本不同,造成版本冲突的问题, 或者SpringBoot版本与Dubbo版本不兼容, 检查结果也没问题. 所有模块的SpringBoot和Dubbo依赖版本都一致,并且不造成冲突.

4.检查服务生产者中Dubbo的包扫描路径,

dubbo.scan.basePackages= com.siri.dubbo
# dubbo.scan.base-packages=(这个是错的)  注意basePackages 容易写成base-packages, 可能会造成启动报错,不是报的找不到bean的错, 是个别的问题, 我忘了, 基本上这种小问题, 百度一下你就知道

再次确认没有问题, 并且前缀没写错.

以上问题有没有,最后根据 spring dubbo配置报错 - 酷盾提供思路, 从服务生产者接口检查.spring dubbo配置报错 - 酷盾Spring Dubbo配置出现错误,需检查相关配置项和服务匹配情况,确保正确无误。icon-default.png?t=N7T8https://www.kdun.com/ask/287923.html

发现问题原因: 

发现服务消费者中, 除了QuanZiService 这个地方引入了QuanZi 这个远程注入的接口, 还有一个地方引入了这个服务生产者接口, 一开始一致在一个类中找问题, 忽略了其他类中的引用. 下意识的根据与服务提供接口名相同的类中找问题, 导致问题的排查方向错了.

然后到VideoService中发现问题,  这个是一个服务消费者, 生产者和消费者不在一个模块下, 所以要用  @Reference   进行远程调用, 但是由于本人粗心大意,写成了 @Resource

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

import com.alibaba.dubbo.config.annotation.Reference;

@Service
@Slf4j
public class VideoService {

    // 应该是 @Reference(version = "1.0.0")
    @Resource
    private QuanZiApi quanZiApi;

}

导致SpringBoot启动时从本地找该类型的Bean进行注入, 结果没有, 导致应用程序无法启动.

解决:

将服务消费者中使用错误的注解改过来:  将  @Resource 或者是@Autowired 改为@Reference(version = "1.0.0") 

import com.alibaba.dubbo.config.annotation.Reference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class VideoService {
    @Reference(version = "1.0.0")
    private QuanZiApi quanZiApi;
}

启动成功!!!

参考:1.  spring dubbo配置报错 - 酷盾spring dubbo配置报错 - 酷盾Spring Dubbo配置出现错误,需检查相关配置项和服务匹配情况,确保正确无误。icon-default.png?t=N7T8https://www.kdun.com/ask/287923.html2. dubbo注入找不到bean怎么解决 - 问答 - 亿速云

感谢!     

以上是一个由于不认真造成的小问题, 本人菜鸟一个,  有不对的地方还请各位大佬批评指正!!!  感激不尽!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值