為了測試我的一個業務系統在不同數據庫上的表現,我的tomcat上配置了多個數據源,這樣我可以輕松的切換系統到不同的數據源上。為了監測每個數據源的運行狀況,隨時觀測執行的sql語句,我為每個數據源都配置了JDBMonitor,並且這些數據源的JDBMonitor的配置文件共用一個config.xml文件。
但是在我運行的時候卻發現系統報錯“java.net.bindexception: address in use: jvm_bind”,根據我三十多年的從醫經驗判斷,俺認為是端口沖突。。。。。。唉,別扔臭雞蛋呀,呵呵。原來是我在config.xml中配置了SocketDBListener,端口為默認的9527,這樣當第一個數據源使用以後,這個數據源將啟動一個SocketDBListener,所以9527端口就被占用了,以後其他的數據源被時候以後在啟動SocketDBListener的時候,也嘗試去監聽9527端口,這樣就出現了如上面的錯誤。解決問題很簡單:為每個數據源都指定一個不同的配置文件(比如config1.xml,config2.xml),並且在每個配置文件中都配置不同的端口(比如9527、9528、3721、9981等等,只要不互相重復,並且不與系統中其他軟件占用的端口沖突即可)。