首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JDBMonitor 多資料源環境下的連接埠衝突解決

     編輯:Java 程式設計入門

問題現場

Tomcat 配置多個資料源 (DataSource),每個資料源皆掛載 JDBMonitor 監控 SQL 執行狀況,共用同一 config.xml。啟動第二個資料源時拋出:

java.net.BindException: Address already in use: JVM_Bind

根因分析

  • config.xml 設定 SocketDBListener 預設監聽埠 9527。
  • 第一個資料源啟動時佔用 9527。
  • 後續資料源嘗試同樣啟動 SocketDBListener 綁定 9527,導致埠衝突。

解決方案:隔離配置檔與埠號

  1. 為每個資料源建立獨立配置檔:config1.xml、config2.xml、config3.xml…
  2. 在各配置檔指定不同監聽埠:
<!-- config1.xml -->
<listener class="com.jdbmonitor.SocketDBListener" port="9527" />

<!-- config2.xml -->
<listener class="com.jdbmonitor.SocketDBListener" port="9528" />

<!-- config3.xml -->
<listener class="com.jdbmonitor.SocketDBListener" port="3721" />
  1. 資料源配置時指定對應配置檔:
<Resource name="jdbc/DS1" ...>
    <parameter>
        <name>configFile</name>
        <value>/path/to/config1.xml</value>
    </parameter>
</Resource>

<Resource name="jdbc/DS2" ...>
    <parameter>
        <name>configFile</name>
        <value>/path/to/config2.xml</value>
    </parameter>
</Resource>

埠號選擇原則

  • 避開系統常用埠 (80, 443, 3306, 8080, 22 等)。
  • 使用 1024-65535 間未被佔用埠,建議預留連續區段 (如 9527-9530) 方便管理。
  • 確認防火牆允許該埠通訊 (若需跨主機監控)。

延伸思考

若監控端為集中式服務,可改用 單一 Collector 埠,各資料源以 JDBC URL 參數 或 MBean 區分來源,避免多埠管理負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved