spring boot配置dubbo注意事项
生活随笔
收集整理的這篇文章主要介紹了
spring boot配置dubbo注意事项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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;@Overridepublic String getName(String name) {// TODO Auto-generated method stubreturn 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{@AutowiredTestMapper testMapper;@Override@Transactionalpublic 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 {@ReferenceTestDubboService testDubboService;@RequestMapping(value="abc/akf",method=RequestMethod.GET)public String abc(String name){ return testDubboService.getName(name);} }這種情況就要考慮是否controller位置比dubbo調用接口的位置低。即下圖所示為正確配置:
總結
以上是生活随笔為你收集整理的spring boot配置dubbo注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。