springboot+dubbo修改掃描路徑引起端口占用的問題


因為在多模塊項目中引入了spring security,消費方(控制層)的工程有兩個包,一個controller,一個config。引入之前消費方工程的application.properties中spring.dubbo.scan=com.***.***.controller沒有問題,引入之后由於config包下面的一個文件也要調用提供方(服務層)的服務,所以改為spring.dubbo.scan=com.***.***,即config包和controller包的上級目錄。啟動項目時報錯java.net.BindException: Address already in use: bind,意思推測為端口占用。檢查消費方工程和提供方工程的application.properties,發現兩個都是spring.dubbo.protocol.port=20880。改掉其中一個,項目正常啟動,且config和controller兩個包都可以被dubbo掃描到。

這里就產生了一個問題,既然之前消費方工程和提供方工程設置的dubbo端口一樣,為什么之前不會報錯,修改掃描路徑之后就會報錯呢?

既然推測是修改掃描包路徑導致了端口占用問題(盡管直接這么說有些莫名其妙),就來比較一下修改前后的掃描包路徑:

                       消費方工程                     提供方工程

修改前:com.***.***.controller       com.***.***.service.impl

修改后:com.***.***                       com.***.***.service.impl

區別在哪?

區別在於修改前的兩個路徑相互獨立,而修改后消費方工程的掃描路徑包含了提供方工程的掃描路徑,dubbo重復掃描了提供方工程,第二次發布至相同端口時就會報錯。

 

 

以上僅為一時之淺見,並不能保證百分百正確。

————強勢分割————

當天晚上的補充:

在按照上面的思路自以為解決了問題之后,雖然好幾次測試都成功了,但是后來卻出現了mybatis報invalid bound statement。由於修改之后的掃描路徑讓我感覺到違和,再加上走投無路之下的我將config包拖到controller包下面,將消費方工程的dubbo掃描路徑重新改為com.***.***.controller以避免和提供方的掃描路徑重復,問題再一次解決了(確信)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM