今天出了一个非常小的问题, 就是由于自己疏忽大意, 真该给自己两巴掌.
问题: 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配置出现错误,需检查相关配置项和服务匹配情况,确保正确无误。https://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配置出现错误,需检查相关配置项和服务匹配情况,确保正确无误。https://www.kdun.com/ask/287923.html2. dubbo注入找不到bean怎么解决 - 问答 - 亿速云
感谢!
以上是一个由于不认真造成的小问题, 本人菜鸟一个, 有不对的地方还请各位大佬批评指正!!! 感激不尽!!!