Merge pull request #125 from shrekwang/master

修复druid中没有执行sql, 命令行工具出null point错误的问题
This commit is contained in:
温高铁
2012-08-29 19:59:27 -07:00
5 changed files with 92 additions and 5 deletions
@@ -183,7 +183,9 @@ public final class DruidStatManagerFacade {
List<List<String>> traceList = new ArrayList<List<String>>();
for (Object dataSource : getDruidDataSourceInstances()) {
List<String> stacks = ((DruidDataSource) dataSource).getActiveConnectionStackTrace();
traceList.add(stacks);
if (stacks.size() > 0 ) {
traceList.add(stacks);
}
}
return traceList;
}
@@ -74,12 +74,20 @@ public class DruidStat {
if (option.printSqlData()) {
List<Map<String, Object>> content = (List<Map<String, Object>>) invokeService(jmxConn, Option.SQL);
TabledDataPrinter.printSqlData(content, option);
if (content == null ) {
System.out.println("无SqlStat统计数据,请检查是否已执行了SQL");
} else {
TabledDataPrinter.printSqlData(content, option);
}
}
if (option.printActiveConn()) {
List<List<String>> content = (List<List<String>>) invokeService(jmxConn, Option.ACTIVE_CONN);
TabledDataPrinter.printActiveConnStack(content, option);
if (content == null || content.size() == 0 ) {
System.out.println("目前无活动中的数据库连接");
} else {
TabledDataPrinter.printActiveConnStack(content, option);
}
}
}
@@ -155,10 +155,26 @@ public class Option {
System.out.println();
System.out.println("说明: ");
System.out.println(" -sql,-ds,-act参数中要至少指定一种数据进行打印, 可以组合使用, 比如 -sql -ds 一起的话就打印两种统计数据");
System.out.println(" -sql,-ds,-act参数中要至少指定一种数据进行打印, 可以");
System.out.println(" 组合使用, 比如 -sql -ds 一起的话就打印两种统计数据");
System.out.println(" -id id可以跟 -sql 或-ds组合, 比如 -sql -id 5 或 -ds -id 1086752");
System.out.println(" pid必需指定, refresh-interval可选, 如不指定,则打印数据后退出");
System.out.println(" pid和refresh-interval参数必需放在命令行的最后, 否则解析会出错");
System.out.println();
System.out.println("例子: ");
System.out.println(" 打印3983进程的sql 统计数据.");
System.out.println(" >druidStat -sql 3983");
System.out.println(" 打印3983进程的ds统计数据.");
System.out.println(" >druidStat -ds 3983");
System.out.println(" 打印3983进程的sql的id为10的详细统计数据.");
System.out.println(" >druidStat -sql -id 10 -detail 3983");
System.out.println(" 打印3983进程的当前活动连接的堆栈信息");
System.out.println(" >druidStat -act 3983");
System.out.println(" 打印3983进程的ds,sql,和act信息");
System.out.println(" >druidStat -ds -sql -act 3983");
System.out.println(" 每隔5秒自动打印ds统计数据");
System.out.println(" >druidStat -ds 3983 5");
}
public int getId() {
+1 -1
View File
@@ -5,4 +5,4 @@ if [ -z "$JAVA_HOME" ] ; then
exit 1
fi
"$JAVA_HOME/bin/java" -cp "./druid-0.2.6.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat $@
"$JAVA_HOME/bin/java" -Dfile.encoding="UTF-8" -cp "./druid-0.2.6.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat $@
@@ -0,0 +1,61 @@
package com.alibaba.druid.bvt.console;
import org.junit.runner.notification.Failure;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import com.alibaba.druid.support.console.DruidStat;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.console.Option;
import junit.framework.TestCase;
import java.lang.management.ManagementFactory;
public class DruidStatNullDataTest extends TestCase {
private DruidDataSource dataSource;
private static String getSelfPid() {
String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
return pid;
}
protected void createDs() throws Exception {
dataSource = new DruidDataSource();
dataSource.setMinIdle(1);
dataSource.setUrl("jdbc:h2:mem:test;");
dataSource.setTestOnBorrow(false);
dataSource.setFilters("stat");
dataSource.setRemoveAbandoned(true);
dataSource.setRemoveAbandonedTimeout(600);
//do not execute any sql, just init the datasource.
dataSource.init();
}
protected void dispose() throws Exception {
JdbcUtils.close(dataSource);
}
public void test_printDruidStat() throws Exception {
createDs();
String pid = getSelfPid();
String[] cmdArray = {"-sql", pid};
Option opt = Option.parseOptions(cmdArray);
DruidStat.printDruidStat(opt);
cmdArray = new String[] {"-act", pid};
opt = Option.parseOptions(cmdArray);
DruidStat.printDruidStat(opt);
dispose();
}
public static void main(String[] args) {
Result result = JUnitCore.runClasses(DruidStatNullDataTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
}
}