spring boot配置dubbo注意事项
2023-09-14 09:06:18 时间
spring boot配置dubbo注意事项
通过前两篇文章,知道了spring boot配置dubbo有两种方式。具体请回顾前两篇文章吧。
现在主要是说下spring boot在自己的application.properties
文件里配置dubbo内容,这种方式遇到的问题。
问题一:dubbo接口发布不成功。
原因一:注意application.properties
文件中配置的,dubbo扫描发布接口包是否正确,即:
#这是你要发布到dubbo的接口所在包位置
spring.dubbo.scan=test.spring.dubboService
这里的test.spring.dubboService包下,就是要发布的dubbo接口所放的位置。
原因二:所发布接口的实现类包位置一定要比接口位置低。即正确配置如下图所示:
原因三:发布接口的实现类上是否忘记添加com.alibaba.dubbo.config.annotation.Service
的@Service
注解。
原因四:发布接口实现类除了有@Service
注解,是否还存在事务注解@Transactional
,原因是alibaba的@Service
注解与事务的注解,不能共用,去掉事务注解即可。(详情请看下一个问题)。
问题二:dubbo发布的接口不能再添加事务注解@Transactional
。
原因:是alibaba的@Service 注解与事务的注解,不能共用
解决方法有三个:
1. 方法一:修改alibaba的@Service
注解,具体办法请参考这里,这种只是让大家看下,最好别用,因为谁闲着没事去修改源代码。
2. 方法二:可以将dubbo发布接口和添加注解的接口分开,两者之间有个调用关系即可,详情请看下图:
上图将发布的接口和访问数据库的接口分离,即将alibaba的@Service
注解,加到TestDubboServiceImpl
上,然后在该实现类中,再引入TestService
接口,然后进入到TestServiceImpl
,将事务注解添加到TestServiceImpl
类中即可,这样就解决了,@Service
和@Transactional
的分离。具体如下:
import com.alibaba.dubbo.config.annotation.Service;
import test.spring.dubboService.TestDubboService;
import test.spring.localService.TestService;
@Service
public class TestDubboServiceImpl implements TestDubboService {
@Autowired //引入本地TestService接口
TestService testService;
@Override
public String getName(String name) {
// TODO Auto-generated method stub
return testService.getName(name);
}
}
TestService的实现类如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;//这里的注解就是这个
import test.spring.localService.TestService;
@Service
public class TestServiceImpl implements TestService{
@Autowired
TestMapper testMapper;
@Override
@Transactional
public String getName(String name) {
//具体的查询数据库的逻辑
return testMapper.selectByName(name);;
}
}
3.方法三:将dubbo的配置由在spring boot 的application.properties文件配置改为传统的那种dubbo xml形式配置。也不会造成冲突。因为传统的dubbo xml形式配置,不用alibaba的那个@Service
注解。
问题三:dubbo消费者调用接口不成功
原因一:还是application.properties,是否没有配置,或配置位置错误。
#这是你要调用的dubbo的接口所在包位置
spring.dubbo.scan=test.spring.dubboService
原因二:一般我们的消费者调用都是在controller调用,也就是下图所示
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
@RestController
public class TestController {
@Reference
TestDubboService testDubboService;
@RequestMapping(value="abc/akf",method=RequestMethod.GET)
public String abc(String name){
return testDubboService.getName(name);
}
}
这种情况就要考虑是否controller位置比dubbo调用接口的位置低。即下图所示为正确配置:
相关文章
- 【Spring Boot】Spring Boot之整合Apollo配置中心
- Spring Boot之默认连接池配置策略
- Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
- Spring Boot 之 RESRful API 权限控制
- [Spring Boot] Use Component Scan to scan for Bean
- spring boot 手动value和自动注入配置的区别[五]
- spring boot:swagger3的安全配置(swagger 3.0.0 / spring security / spring boot 2.3.3)
- spring boot:actuator的安全配置:使用spring security做ip地址限制(spring boot 2.3.2)
- spring boot 2X中@Scheduled实现定时任务及多线程配置
- Spring boot后台搭建二为Shiro权限控制添加缓存
- spring boot下JedisCluster方式连接Redis集群的配置
- [Spring boot] CommandLineRunner and Autowired
- maven 创建spring boot 需要的配置[一]
- spring boot:使用poi导出excel电子表格文件(spring boot 2.3.1)
- spring boot配置dubbo注意事项
- spring boot配置dubbo(XML)
- spring boot配置dubbo(properties)
- spring boot多环境配置
- 【项目实战】spring-boot-configuration-processor 一个用于生成配置元数据的注解处理器
- Spring Boot——maven项目常用打包配置
- 学习Spring Boot:(二十四)多数据源配置与使用
- 解决spring boot 无法访问静态文件夹的附件或图片
- 毕业设计 Spring Boot的在线课堂学习系统(含源码+论文)
- 毕业设计 Spring Boot的汉服文化平台管理系统(含源码+论文)
- Spring Boot系列——日志配置
- Spring Boot简介
- 【Spring Boot】缓存预热与缓存清除--原理、作用和目的