❶ bbo報錯qos-server...Address already in use
報錯日誌如下:
問題原因是多個服務在該伺服器內運行,兩個服務的qos-server配置埠號一致,啟動時提示被佔用,修改其一埠號並重啟。
qos是bbo的在線運維命令,bbo2.5.8新版本重構了telnet模塊,提供了新的telnet命令支持,新版本的telnet埠與bbo協議的埠是不同的埠,默認為22222。
qos埠沖突並影響服務消費者消費服務,但是每次程序啟動總是拋出埠沖突異常
❷ 關於升級 Dubbo 版本到 2.6.5 後啟動失敗的「坑」
Dubbo 從低版本升級到 2.6.5 版本後,啟動失敗,報錯如下:
<b><font color='red'>上終極方案:使用 2.6.2 以下版本或者 2.7.0 以上版本的 bbo ;</font></b>
具體解決方式需要根據項目的情況解決,提供一些其他方案:
刪除 web.xml 中如下的配置:
Spring Boot 工程沒有特別好的解決方案,提供兩個解決思路:
這個方案也沒有繞過添加 web.xml 的命運,做法如下:
觀察報錯日誌,報錯位置很明顯是 Spring 框架初始化時的報錯,重點是: there is already a root application 。
這個錯誤拋出位置余汪返位於: Spring-web 包的 ContextLoader 類的 initWebApplicationContext 方法。
原因很明顯, ContextLoader 被調用了至少兩遍,第二遍報錯導致項目初始化失敗,其主要的「罪魁禍首」是 bbo 包下面的 web-fragment.xml 。
Servlet 3.0 是隨著 Java EE 6 規范發布的,主要新增特性:
支持 Servlet 3.0 規范的容器,在啟動後會掃描工程的 jar 包,找到符合規范的 添加了相關註解的類 和 web-fragment.xml 然後跟 web.xml 的配置合並作為整個項目的初始化配置。
上述問題的發生原因很明顯了:
這個是 Servlet 3.0 提供的一個屬性,等同一個開關,設置為 true 則表示 web.xml 已經提供了全部的配置信息,不需要容器再去各個 jar 包找配置了陵罩,換句話就是:關閉 可插特性 ;
這個屬性是 注釋裡面提供的解決思路。這個屬性可以理解為指定 web-fragment.xml 的載入順序,和 ordering 標簽的區別是, absolute-ordering 僅僅針對我們指定的 web-fragment.xml 做排序。
輕易升級一個基礎框架不是一個好的做法豎飢,<b>升級基礎框架還是應該關注下當前版本和目標升級版本,框架作者做了些什麼事情,出現過什麼BUG。</b>
當前的 Spring Boot 的解決方案並不讓人滿意,畢竟 Spring Boot 的無Xml的感覺還是很爽的,為了這個升級引入了 web.xml 會有一點點不爽。