- 浏览: 511982 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
chimpp55:
java.lang.NoSuchMethodError: or ...
基于Junit2.0的StrutsTestCase应用 -
opmic:
<property name="srcDir& ...
使用Eclipse与Ant进行java程序开发 -
univasity:
非常好,谢谢分享。
使用Eclipse与Ant进行java程序开发 -
peanut_sei:
exception handlers 译成 例外处理 倒是第 ...
JavaScript高级应用:例外处理
使用 JDBMonitor,您可以把数据库执行情况记录通过各种方式记录下来,比如打印到控制台、输出到文件或者通过socket传送给远程客户端。JDBMonitor是可扩展的,您可以扩展它来将执行情况通过其他方式记录下来,您所需要做的就是写一个实现IDBListener接口的类即可。
JDBMonitor遵守 GNU Lesser General Public Licence (LGPL)协议。此协议包含在发行包中。
入门
几乎所有大型数据库应用都包含有自己的SQL执行日志功能,此功能不仅能帮助开发人员调试,而且可以为DBA(数据库管理员)提供系统的运行信息。
(1)很难将业务逻辑同日志代码分离
(2)降低了代码的可读性。
(3)降低了系统的运行速度。在记录日志的时候,程序会暂停运行等待直到记录完成,而I/O操作是相当耗时的。
(4)很难记录运行耗时、语句参数等其他信息
(5)很难为我们无法修改代码的系统(例如没有源代码的系统)或者很难增加记录日志功能代码的系统(比如系统使用了ORMapping)增加日志功能。
JDBMonitor 则不同:
(1)您最多只需要修改一行代码。您需要修改的代码就是这一行:Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver") ,然后再修改一下 JDBC连接字符串,只要从 “jdbc:db2://10.74.198.247:50000/app”修改成” listenerconfig=config.xml:url= jdbc:db2://10.74.198.247:50000/app”就可以了。在您使用WebLogic ,Tomcat或其他服务器的数据源功能的时候,连修改代码这一步都是无需的。
(2)JDBMonitor另起一个线程来记录SQL,所以它不会对程序运行速度有任何影响。
(3)它是高度可扩展的,所以您可以扩展它来把执行情况通过其他方式记录。比如,您可以写一个扩展类,来通过电子邮件将日志发送出去。
取得 JDBMonitor
JDBMonitor的最新稳定版本可以在JDBMonitor的网站上取得:
http://www.cownew.com/JDBMonitor
使用 JDBMonitor
1 将 jdbmonitor.jar放到您系统的类路径下。
2 让系统加载 JDBMonitor的JDBC驱动。
这一步将会依您系统加载JDBC驱动的方式的不同而不同。
(1)如果您通过代码的形式加载JDBC驱动,例如:
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
Connection cn = DriverManager.getConnection(……);
在这种情况下 ,您必须修改 “Class.forName”这一句来加载JDBMonitor的JDBC驱动(“com.cownew.JDBMonitor.jdbc.DBDriver”),而非以前的数据库JDBC驱动。
例如:
Class.forName(“com.cownew.JDBMonitor.jdbc.DBDriver”);
Connection cn = DriverManager.getConnection(……);
(2)如果您在配置文件中指定JDBC驱动,比如,数据源配置文件或者其他类似的文件。
请修改原来的 JDBC驱动类为 “com.cownew.JDBMonitor.jdbc.DBDriver” 。
3 让 JDBMonitor加载能够加载原来的JDBC驱动
JDBMonitor的工作原理就是截获JDBC驱动的SQL语句调用、记录SQL语句,然后将SQL语句重新转发给原来的JDBC驱动,所以JDBMonitor必须首先向DriverManager注册JDBC驱动。
原来的JDBC驱动定义在配置文件的“JdbcDrivers” 段中。
<JdbcDrivers>
<JdbcDriver class=" com.mysql.jdbc.Driver"/>
</JdbcDrivers>
4 在原来的JDBC连接字符串前增加 JDBMonitor所需的信息。
您所需要做的就是将” listenerconfig=<configfilepath>:url=” 增加到原来的JDBC连接字符串前。“<configfilepath>”代表配置文件的路径,下面集中路径都是合法的:
/com/jdbmonitor/config.xml
com/jdbmonitor/config.xml
c:/ jdbmonitor /config.xml
JDBMoinitor使用getClass().getResourceAsStream加载类似于“/com/jdbmonitor/config.xml” and “com/jdbmonitor/config.xml” 的类路径文件,使用 FileInputStream加载类似于 “c:/ jdbmonitor /config.xml”的配置文件。
5 指定您要使用监听器:
您可以把数据库执行情况记录通过各种方式记录下来,比如打印到控制台、输出到文件或者通过socket传送给远程客户端。
我们已经开发了如下常用的监听器:FileDBListener、ConsoleDBListener、 SocketDBListene、DataBaseDBListener。当然您也可以开发满足您要求的监听器。
监听器定义在配置文件的 “Listeners”段中:
<Listeners>
<!--ConsoleDBListener no arguments-->
<Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/>
<!--the arguments of FileDBListener is the file to log the SQL statement -->
<Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/>
<!--the arguments of SocketDBListener is the bound socket port of the listener server -->
<Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/>
</Listeners>
搞定!启动您的系统。耶!SQL语句被记录下来了,我们可以在控制台、文件甚至远程监视器中看到日志了。
举例
mvnforum的例子:
您可以从http://www.mvnForum.com得到mvnforum。我演示用的版本是1.0。
(1)打开webapp\WEB-INF\classes\ mvncore.xml,重新配置:
修改之前:
<driver_class_name>com.mysql.jdbc.Driver</driver_class_name>
<database_url>listenerconfig=c:/log/jdbmonitor/config.xml:url= jdbc:mysql://localhost/mvnforum?useUnicode=true&characterEncoding=utf-8</database_url>
修改之后:
<driver_class_name> com.cownew.JDBMonitor.jdbc.DBDriver </driver_class_name>
<database_url>jdbc:mysql://localhost/mvnforum?useUnicode=true&characterEncoding=utf-8</database_url>
(2)创建文件 c:/log/jdbmonitor/config.xml。我只想将SQL语句记录到文本文件中,所以我做如下配置:
<config>
<Listeners>
<!--the arguments of FileDBListener is the file to log the SQL statement -->
<Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/>
</Listeners>
<JdbcDrivers>
<JdbcDriver class="com.mysql.jdbc.Driver"/>
</JdbcDrivers>
</config>
(3) 将 jdbmonitor.jar放到webapp\WEB-INF\lib下。
(4) 搞定!
Jive的例子:
您可以从http://www.jivesoftware.com得到Jive。我演示用的版本是 Jive 2.0 beta版。
(1)打开http://localhost:8080/jive/admin/
“jdbc” 填为:com.cownew.JDBMonitor.jdbc.DBDriver
“server” 填为:c:/log/jdbmonitor/config.xml:url=jdbc:mysql://locahost/jive
(2)将 jdbmonitor.jar放到WEB-INF\lib下
(4) 象mvnforum中一样创建同样的 c:/log/jdbmonitor/config.xml 文件.
(4) 搞定!
代码方式的例子:
尽管直接在代码中指定系统所用的JDBC驱动类名和JDBC连接字符串是不推荐的,但是仍然有系统是这么做的。
比如:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = null;
PreparedStatement ps = null;
try
{
conn = DriverManager
.getConnection("jdbc:odbc:MQIS");
for (int i = 0; i < 1000; i++)
{
ps = conn.prepareStatement("update T_Material set fid=fid");
ps.execute();
ps.close();
}
} finally
{
....
}
(1)修改一下代码为:
Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver");
Connection conn = null;
PreparedStatement ps = null;
try
{
conn = DriverManager.getConnection("listenerconfig= c:/log/jdbmonitor/config.xml:url=jdbc:odbc:MQIS");
for (int i = 0; i < 1000; i++)
{
ps = conn.prepareStatement("update T_Material set fid=fid");
ps.execute();
ps.close();
}
} finally
{
....
}
(2)创建c:/log/jdbmonitor/config.xml文件。我想记录SQL语句到文本文件中同时输出到控制台,这样可以辅助我进行调试,所以我配置如下:
<config>
<Listeners>
<!--the arguments of FileDBListener is the file to log the SQL statement -->
<Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/>
<!--ConsoleDBListener no arguments-->
<Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/>
</Listeners>
<JdbcDrivers>
<JdbcDriver class="com.mysql.jdbc.Driver"/>
</JdbcDrivers>
</config>
(3) 将 jdbmonitor.jar放到类路径下。
(4) 搞定!
监听器
我们已经开发了如下常用的监听器:FileDBListener、ConsoleDBListener、 SocketDBListener、DataBaseDBListener。
1、ConsoleDBListener 控制台监听器
ConsoleDBListener会将SQL语句打印到控制台中。
这个监听器很容易配置:
<Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/>
2、FileDBListener 文件监听器
FileDBListener 会将SQL语句保存到文本文件中。
如下配置:
<Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/>
arg="c:/aaa.txt"表示日志将保存到文件c:/aaa.txt中。
3、SocketDBListener Socket监听器
SocketDBListener是一个socket服务器,客户端连接到它上边以后就可以接收到它发出的SQL语句。
如下配置:
<Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/>
arg="9527"表示服务器将在9527端口监听。
我们已经开发了如下两种客户端:SocketConsoleClient(Socket控制台客户端) 和 SocketSwingClient(Socket Swing客户端)。
SocketConsoleClient工作在控制台中:
SocketSwingClient是一个Swing GUI客户端:
您可以运行"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketConsoleClient" 来启动SocketConsoleClient,运行"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketSwingClient"启动SocketSwingClient。
您可以编写符合您自己要求的客户端,具体细节请参考com.cownew.JDBMonitor.listenerImpl.sckListenerClient.ListenerClient和com.cownew.JDBMonitor.listenerImpl.sckListenerClient.IDBSocketClientListener.
4、DataBaseDBListener
DataBaseDBListener将会把SQL语句记录到数据库中:
如下配置:
<Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener"
arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/>
"dburl=jdbc:odbc:MQIS;user=;password=;"表示目标数据库的JDBC连接字符串。"logtable=T_Log_SQLLog" 表示SQL记录将被保存到哪个表中,默认的是T_Log_SQLLog。
如果目标数据库用的JDBC驱动与被监控的数据库不同,请将它加入配置文件的 "JdbcDrivers" 部分,例如:
<config>
<Active>true</Active>
<Listeners>
<Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/>
<Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener"
arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/>
</Listeners>
<JdbcDrivers>
<JdbcDriver class="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<JdbcDriver class="sun.jdbc.odbc.JdbcOdbcDriver"/>
</JdbcDrivers>
</config>
"T_Log_SQLLog"的结构是:
"T_Log_SQLLog"的建库脚本在com/cownew/JDBMonitor/listenerImpl/dataBaseListener,(db2.sql,mssqlserver.sql,oracle.sql)。
DataBaseDBListener是跨数据库的,你可以把记录SQL到任何关系数据库中。
发表评论
-
Eclipse快捷键(引用转贴)
2004-09-23 11:47 873本文档从Eclipse软件上整理,是列出了标准的快捷键,未列出 ... -
java Excel API 简介(翻译)
2004-09-23 11:49 994java Excel API 简介(翻译) 版权声明:CSD ... -
spring-richclient开发swing应用程序
2005-09-03 18:00 1962Swing桌面应用程序的开发一直以来都是Java桌面开发者心中 ... -
spring-richclient开发swing应用程序 2
2005-09-03 18:07 12351 Main函数PetClinicStandalone里面基本 ... -
spring-richclient开发swing应用程序 3
2005-09-03 18:36 1793richclient-application-context. ... -
spring-richclient开发swing应用程序 4
2005-09-03 18:50 1279spring-rcp里面简单到极点(相对)的就算是菜单和导航条 ... -
关于Ajaxian JSF的设计原则
2005-09-09 16:05 690目前网上大大小小的Ajax Framework已经计算不清了, ... -
Velocity学习笔记1——Velocity是什么
2006-05-23 22:38 1115Velocity是一个基于Java的模版引擎。它允 ... -
Velocity学习笔记2——Velocity能够做什么
2006-05-24 11:06 996一个 ... -
使用JDBMonitor剖析Hibernate的实现机制
2006-05-17 18:20 1097使用JDBMonitor剖析Hibernate的实现机制现在j ... -
Log4j和JDBMonitor的比较
2006-05-17 18:21 851Log4j和JDBMonitor的比较Log4 ... -
Apache Commons Chain简明手册
2007-05-25 01:10 3279基本对象1. 接口。它是Commons Chain中最重要的接 ... -
开始使用Commons Chain (第一部分)
2007-05-25 01:12 1191作为程序开发人员,我 ... -
在JAVA中使用文档对象模型DOM经验小结
2007-07-13 23:20 824文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂 ... -
什么时候该用synchronized
2007-07-13 23:48 1414由于同一进程的多个线 ... -
XMLC在eclipse中的使用
2007-07-13 23:50 964关于外部插件的使用可以用link的方式做,如果简单的只把插件丢 ... -
J2EE架构学习者的6个最佳实践
2007-07-14 00:06 816虽然许多文章曾经讨论 ... -
面向Java程序员的Ajax:构建动态Java程序
2007-07-14 00:11 774Ajax(即异步 JavaScript 和 ... -
用java打包成zip
2007-08-21 11:51 1427--- 大家可能对于Zip格式的文件已经司空见惯了,我们可以使 ... -
利用java处理XML文档
2007-08-22 23:43 845在java对XML进行处理时, ...
相关推荐
JDBMonitor是一款专为Java开发者设计的高效、易用的数据库监控工具。它提供了实时的数据库查询分析、性能监控以及故障排查功能,帮助开发者优化数据库操作,提升应用程序的运行效率。 **核心特性** 1. **实时监控*...
jdbmonitor是一个小巧但功能强大的监控工具,它可以集成到WebLogic Server中,提供对应用执行的SQL语句的透明化跟踪。在描述中提到,当我们在WebLogic控制台上操作应用时,通常无法直接看到对应的SQL执行情况,而...
Jdbmonitor的一个简单实例,resources下的config.xml是其的配置文件。这个项目整合了jpa和spring。用maven进行了管理。一些常用包可以使用maven导入。如果没有maven可以按照pom.xml中列出的包导入项目中。
驱动替换:在myrumba.xml文件中,需要将所有与数据库驱动相关的配置,如business、querySource、queryResult中的`oracle.jdbc.driver.OracleDriver`替换为`com.cownew.JDBMonitor.jdbc.DBDriver`。这样做是为了让...
jdbmonitor.jar 开发必备工具
简单的做了一个测试的例子。Maven项目管理。如果没有Maven的话自己依照pom.xml下载保存也可以。test是测试例。config.xml是JDBMonitor的配置文件。我仅配了2个。可以参考他包内自带的配置文件.
JDBMonitor 是一款轻量级且易于集成的开源数据库监控工具,它以无代码侵入的方式提供数据库操作日志,通过控制台、数据库日志记录和图形界面等多种方式展示监控信息。其丰富的文档和开放源码的特性使得开发者可以...
通过配置数据库的日志级别,我们可以记录所有执行的SQL语句及其执行时间,从而分析哪些查询可能导致性能问题。例如,在MySQL中,可以通过修改my.cnf配置文件来启用慢查询日志,记录那些执行时间超过特定阈值的查询。...
JDBC-Performance-Logger, 一个JDBC驱动程序包装器和用于分析 性能记录器命令行目测试通过JDBC执行的sql语句的性能。( 点击下面的图片了解这些特性的概况) 为什么还有另一个项目?虽然在JDBC性能监视( log4jdbc,P6...