1.applicationContext.xml中增加如下配置:
<bean abstract ="true" id ="mysql_database" class ="com.alibaba.druid.pool.DruidDataSource" init-method ="init" destroy-method ="close" >
<property name ="proxyFilters" >
<list >
<ref bean ="stat-filter" />
<ref bean ="log-filter" />
</list >
</property >
<property name ="filters" >
<value > stat,wall,log4j</value >
</property >
</bean >
<bean id ="stat-filter" class ="com.alibaba.druid.filter.stat.StatFilter" >
<property name ="mergeSql" value ="true" />
<property name ="slowSqlMillis" value ="1000" />
<property name ="logSlowSql" value ="true" />
</bean >
<bean id ="log-filter" class ="com.alibaba.druid.filter.logging.Log4jFilter" >
</bean >
2.log4j.properties中配置如下:
log 4j.rootLogger=warn,A1,A2
log 4j.logger.druid.sql=info,A1,A2
log 4j.logger.druid.sql.DataSource=info,A1,A2
log 4j.logger.druid.sql.Connection=info,A1,A2
log 4j.logger.druid.sql.Statement=info,A1,A2
log 4j.logger.druid.sql.ResultSet=info,A1,A2
log 4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log 4j.appender.A1.File=../druid-logs/info_slowsql.log
log 4j.appender.A1.DatePattern='.' yyyy-MM-dd
log 4j.appender.A1.ImmediateFlush=true
log 4j.appender.A1.Append=true
log 4j.appender.A1.Threshold=info
log 4j.appender.A1.layout=org.apache.log4j.PatternLayout
log 4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c] - %m%n
log 4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log 4j.appender.A2.File=../druid-logs/warn_slowsql.log
log 4j.appender.A2.DatePattern='.' yyyy-MM-dd
log 4j.appender.A2.ImmediateFlush=true
log 4j.appender.A2.Append=true
log 4j.appender.A2.Threshold=warn
log 4j.appender.A2.layout=org.apache.log4j.PatternLayout
log 4j.appender.A2.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c] - %m%n
经过上面的配置,就会在文件中打印,如下的慢SQL语句:
......
[2014-08-26 11:12:59] [ERROR] [com.alibaba.druid.filter.stat.StatFilter] - slow sql 3121 millis.
select count (1 ) from person where schoolid=? and isDeleted=0 and GET_FIRST_PINYIN_CHAR(username) =?
["145" ,"a" ]
......
有问题欢迎指正,可参考官方文档,以官方文档为准。
参考:http://www.oschina.NET /question/97503_117693
过程中遇到日志报错“
Communications link failure,The last packet successfully received from the server was *** millisecon
”
使用Connector/J连接MySQL 数据库,程序运行较长时间后就会报以下错误:
Communications link failure,The last packet successfully received from the server was * **millisecond ago. The last packet successfully sent to the server was * **millisecond ago。
其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。
后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:
按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试 时使用了autoReconnect=true&failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。
没办法,只能修改mysql 的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:
[mysqld] wait_timeout=31536000 interactive_timeout=31536000
重启生效,需要同时修改这两个参数。
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure [09:49:36.821] [09:49:36.821]Last packet sent to the server was 0 ms ago.