什么是JDBMonitor ?JDBMonitor是一個非常強大的數(shù)據(jù)庫監(jiān)控、日志工具,它的無侵入性是它最大的特點。所謂無侵入性指的是無需編寫代碼就可以為系統(tǒng)增加數(shù)據(jù)日監(jiān)控、日志功能。那么它到底是怎么實現(xiàn)的呢?咱們來探索一下它的基本原理。 要明白JDBMonitor的工作原理,必須首先弄明白JDBC驅(qū)動的工作原理:
所有的JDBC驅(qū)動都實現(xiàn)java.sql.Driver接口,此接口有兩個重要方法:Connection connect(String url, java.util.Properties info),boolean acceptsURL(String url)。 JDBC中有個DriverManager類,它有一個重要方法, registerDriver(java.sql.Driver driver) 所有的JDBC驅(qū)動都要調(diào)用此方法,這樣才能將注冊到驅(qū)動管理器中。 當(dāng)用戶調(diào)用DriverManager.getConnection("jdbc:......")的時候,DriverManager就把用戶穿過來的連接字符串“jdbc:......”發(fā)給每個注冊的驅(qū)動Driver的acceptsURL方法做為參數(shù),驅(qū)動Driver就調(diào)用這個Driver的connect方法然后將方法的返回值直接做為自己的返回值。
JDBMonitor寫了自己的JDBCDriver:DBDriver,這個DBDriver識別所有以listenerconfig=開頭的jdbc連接字符串,這樣如果您修改了您系統(tǒng)的JDBC連接字符串并添加listenerconfig=等部分以后,此url就不會被您原來的JDBC驅(qū)動認(rèn)識,耳反而被DBDriver認(rèn)識,這樣每次的數(shù)據(jù)庫連接調(diào)用也都通過DBDriver以及相關(guān)的類來進(jìn)行(比如DBPreparedStatement等),這些類首先先把通過的數(shù)據(jù)庫調(diào)用記錄下來,然后再轉(zhuǎn)發(fā)給真正的數(shù)據(jù)庫驅(qū)動,這樣就達(dá)到了攔截任何JDBC調(diào)用的目的。更相信內(nèi)容,請參考com.cownew.JDBMonitor.jdbc包下的DBDriver、DBConnection、DBStatement、DBPreparedStatement等類。這些類采用了代理模式、裝飾者模式等設(shè)計模式,使得程序的可擴展性得到很大的提升。
|