SpringBoot使用AOP导致dubbo服务不注册

简介: 在搭建SpringBoot项目的时候,原本已经集成了Dubbo并且测试也没问题,在加AOP的时候,发现Dubbo的provider不注册了。说明一下,本着极简原则,Dubbo的provider在这里用@Service注解来发布服务,并没有使用xml配置的方式。这时用的springboot和dubbo的版本为:

问题


在搭建SpringBoot项目的时候,原本已经集成了Dubbo并且测试也没问题,在加AOP的时候,发现Dubbo的provider不注册了。说明一下,本着极简原则,Dubbo的provider在这里用@Service注解来发布服务,并没有使用xml配置的方式。

这时用的springboot和dubbo的版本为:


SpringBoot版本:1.5.1.RELEASE
io.dubbo.springbootb版本1.0.0(Dubbo版本:2.5.3)


原因排查


1.5.1.RELEASE版本的springboot依赖的spring版本为4.3.6.RELEASE,之前用4.3.6.RELEASE版本的spring和2.5.3版本的dubbo结合也没问题啊,那么和之前搭建的项目唯一的区别就是之前都用xml来配置dubbo,这次用了注解,于是用xml配置的方式配置了一下dubbo,加上AOP,可以正常发布服务,所以可能问题就出在“dubbo的@Service注解和AOP的结合”上。


在这里顺便复习一下Spring的AOP(静态代理与动态代理 ; Spring AOP原理及其实现)


Spring AOP的原理就是为扫描到的类动态生成一个代理类(jdk生成的代理类与被代理类共同实现一个接口;cglib生成的代理类就是被代理类的子类),先记录一下解决这个问题的方法,下面抽时间再来补上原理。

// TODO : Spring AOP 为带@Service的dubbo服务生成代理类的原理分析

解决方法


1、前面也尝试到,如果用xml配置dubbo,就可以正常发布服务,因此可以直接用xml配置dubbo服务来解决这个问题。


2、但如果还是想用dubbo的@Service注解来发布服务,需要升级一下dubbo的版本。在AOP的作用下发布服务不成功是dubbo老版本的一个bug,在2.6.*已经被修复。但springboot和dubbo结合时需要用到io.dubbo.springboot的依赖,io.dubbo.springboot目前只有1.0.0版本,且这个版本依赖的dubbo是2.5.3,所以需要在引用io.dubbo.springboot之后排除dubbo的引用,再重新引用一下2.6.*版本的dubbo:


<!--添加io.dubbo.springboot依赖-->
<dependency>
     <groupId>io.dubbo.springboot</groupId>
     <artifactId>spring-boot-starter-dubbo</artifactId>
     <version>1.0.0</version>
     <exclusions>
         <!--去除dubbo依赖-->
         <exclusion>
          <groupId>com.alibaba</groupId>
               <artifactId>dubbo</artifactId>
         </exclusion>
    </exclusions>
</dependency>
<!--重新添加2.6.2的dubbo依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.2</version>
</dependency>

然后在@Service注解中,添加该服务提供者所实现接口的类型


@org.springframework.stereotype.Service("userService")
@com.alibaba.dubbo.config.annotation.Service(version = "1.0.0", interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {
   //……
}

这时就可以成功发布dubbo服务了,AOP也可以正常工作。

相关文章
|
11月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
1037 0
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
10386 7
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
Java API 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
1894 0
|
Java 开发者 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——什么是AOP
本文介绍了Spring Boot中的切面AOP处理。AOP(Aspect Oriented Programming)即面向切面编程,其核心思想是分离关注点。通过AOP,程序可以将与业务逻辑无关的代码(如日志记录、事务管理等)从主要逻辑中抽离,交由专门的“仆人”处理,从而让开发者专注于核心任务。这种机制实现了模块间的灵活组合,使程序结构更加可配置、可扩展。文中以生活化比喻生动阐释了AOP的工作原理及其优势。
677 0
|
Java
SpringBoot AOP 记录WEB请求日志
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/71556374 接上一篇文章: http://blog.
1292 0
|
11月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。