标签:adb ssm psi sub v2x kmp pl2 参数 pmu
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4081848.html 感谢!
使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况。
平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺点是占位符与参数是分开打印的,如果想要拷贝sql至PLSQL Developer客户端直接执行,需要自己拼凑sql。而log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在PLSQL Developer等客户端直接执行,加快调试速度。
下载log4jdbc的jar包log4jdbc-1.2.jar以及依赖的相关Jar包log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar,如下图所示:
配置log4j的log4j.properties的配置文件,如下所示:
log4j.logger.jdbc.sqlonly=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.logger.jdbc.sqltiming=INFO,console
log4j.logger.jdbc.connection=INFO,console
修改dbconfig.properties配置文件的url和driverClassName
1 url:jdbc:log4jdbc:mysql://localhost:3306/xdptest 2 driverClassName:net.sf.log4jdbc.DriverSpy 3 username:root 4 password:root 5 filters:stat 6 maxActive:200 7 initialSize:20 8 maxWait:60000 9 minIdle:10 10 timeBetweenEvictionRunsMillis:60000 11 minEvictableIdleTimeMillis:300000 12 validationQuery:SELECT ‘x‘ 13 testWhileIdle:true 14 testOnBorrow:false 15 testOnReturn:false 16 removeAbandoned:false 17 removeAbandonedTimeout:1800 18 logAbandoned:true
经过这样的配置之后,就可以使用log4jdbc记录应用系统执行的SQL信息了。
编写一个测试Servlet进行测试,代码如下:
1 /**
2 *
3 */
4 package me.gacl.web.controller;
5
6 import java.io.IOException;
7 import java.sql.Connection;
8 import java.sql.PreparedStatement;
9 import java.sql.SQLException;
10 import java.util.UUID;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 import me.gacl.util.DataSourceUtil;
16
17 /**
18 * <p>ClassName: TestServlet<p>
19 * <p>Description: <p>
20 * <p>Company:广州利迪网络科技有限公司 <p>
21 * @author xudp
22 * @version 1.0 V
23 * @createTime 2014-11-5 下午01:49:49
24 */
25 public class TestServlet extends HttpServlet {
26
27 public void doGet(HttpServletRequest request, HttpServletResponse response)
28 throws ServletException, IOException {
29 String sql = "INSERT INTO LD_USER(ID,USERNAME,USERCODE,PASSWORD) VALUES(?,?,?,?)";
30 Connection connection = DataSourceUtil.getConnection();
31 PreparedStatement pstmt = null;
32 try {
33 pstmt = connection.prepareStatement(sql);
34 pstmt.setString(1, UUID.randomUUID().toString());
35 pstmt.setString(2, "孤傲苍狼");
36 pstmt.setString(3, "gacl");
37 pstmt.setString(4, "xdp");
38 int executeResult = pstmt.executeUpdate();
39 } catch (SQLException e) {
40 e.printStackTrace();
41 }finally{
42 try {
43 pstmt.close();
44 connection.close();
45 } catch (SQLException e) {
46 e.printStackTrace();
47 }
48 }
49 }
50
51 public void doPost(HttpServletRequest request, HttpServletResponse response)
52 throws ServletException, IOException {
53 this.doGet(request, response);
54 }
55 }
访问TestServlet,执行doGet方法往数据库中插入数据,log4jdbc记录的SQL信息如下图所示:
可以看到,log4jdbc记录出了SQL的执行的时间,执行时的参数以及执行耗时。这对于我们在开发中查找SQL错误是非常有帮助的。
标签:adb ssm psi sub v2x kmp pl2 参数 pmu
原文地址:http://www.cnblogs.com/zlslch/p/6038056.html