diff --git a/pom.xml b/pom.xml
index 205f526653..21ba1ea794 100644
--- a/pom.xml
+++ b/pom.xml
@@ -526,5 +526,24 @@
2.0.2
test
+
+
+ org.javasimon
+ javasimon-spring
+ 3.3.0
+ test
+
+
+ org.javasimon
+ javasimon-jdbc4
+ 3.3.0
+ test
+
+
+ org.javasimon
+ javasimon-javaee
+ 3.3.0
+ test
+
diff --git a/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java b/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java
new file mode 100644
index 0000000000..ec9e1b9842
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java
@@ -0,0 +1,26 @@
+package com.alibaba.druid.support.monitor;
+
+import java.util.Date;
+
+public class MonitorContext {
+
+ private String appName;
+ private Date collectTime;
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public Date getCollectTime() {
+ return collectTime;
+ }
+
+ public void setCollectTime(Date collectTime) {
+ this.collectTime = collectTime;
+ }
+
+}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/MonitorService.java b/src/main/java/com/alibaba/druid/support/monitor/MonitorService.java
new file mode 100644
index 0000000000..b97685a463
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/monitor/MonitorService.java
@@ -0,0 +1,110 @@
+package com.alibaba.druid.support.monitor;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import com.alibaba.druid.support.monitor.dao.MonitorDao;
+
+public class MonitorService {
+
+ private final static long DEFAULT_TIME_BETWEEN_COLLECT = 60 * 5;
+
+ private ScheduledExecutorService scheduler;
+ private int schedulerThreadSize = 1;
+
+ private long timeBeetweenSqlCollect = DEFAULT_TIME_BETWEEN_COLLECT;
+ private long timeBeetweenSpringCollect = DEFAULT_TIME_BETWEEN_COLLECT;
+ private long timeBeetweenWebUriCollect = DEFAULT_TIME_BETWEEN_COLLECT;
+ private TimeUnit timeUnit = TimeUnit.SECONDS;
+
+ private MonitorDao dao;
+
+ public void start() {
+ if (scheduler == null) {
+ scheduler = new ScheduledThreadPoolExecutor(schedulerThreadSize);
+ }
+
+ scheduler.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ collectSql();
+ }
+ }, timeBeetweenSqlCollect, timeBeetweenSqlCollect, timeUnit);
+
+ scheduler.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ collectSpringMethod();
+ }
+ }, timeBeetweenSpringCollect, timeBeetweenSpringCollect, timeUnit);
+
+ scheduler.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ collectWebURI();
+ }
+ }, timeBeetweenWebUriCollect, timeBeetweenWebUriCollect, timeUnit);
+ }
+
+ public ScheduledExecutorService getScheduler() {
+ return scheduler;
+ }
+
+ public void setScheduler(ScheduledExecutorService scheduler) {
+ this.scheduler = scheduler;
+ }
+
+ private void collectSql() {
+
+ }
+
+ private void collectSpringMethod() {
+
+ }
+
+ private void collectWebURI() {
+
+ }
+
+ public MonitorDao getDao() {
+ return dao;
+ }
+
+ public void setDao(MonitorDao dao) {
+ this.dao = dao;
+ }
+
+ public long getTimeBeetweenSqlCollect() {
+ return timeBeetweenSqlCollect;
+ }
+
+ public void setTimeBeetweenSqlCollect(long timeBeetweenSqlCollect) {
+ this.timeBeetweenSqlCollect = timeBeetweenSqlCollect;
+ }
+
+ public long getTimeBeetweenSpringCollect() {
+ return timeBeetweenSpringCollect;
+ }
+
+ public void setTimeBeetweenSpringCollect(long timeBeetweenSpringCollect) {
+ this.timeBeetweenSpringCollect = timeBeetweenSpringCollect;
+ }
+
+ public long getTimeBeetweenWebUriCollect() {
+ return timeBeetweenWebUriCollect;
+ }
+
+ public void setTimeBeetweenWebUriCollect(long timeBeetweenWebUriCollect) {
+ this.timeBeetweenWebUriCollect = timeBeetweenWebUriCollect;
+ }
+
+ public TimeUnit getTimeUnit() {
+ return timeUnit;
+ }
+
+ public void setTimeUnit(TimeUnit timeUnit) {
+ this.timeUnit = timeUnit;
+ }
+
+}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java
new file mode 100644
index 0000000000..b50751e9b9
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java
@@ -0,0 +1,17 @@
+package com.alibaba.druid.support.monitor.dao;
+
+import java.util.List;
+
+import com.alibaba.druid.stat.JdbcSqlStatValue;
+import com.alibaba.druid.support.http.stat.WebURIStatValue;
+import com.alibaba.druid.support.monitor.MonitorContext;
+import com.alibaba.druid.support.spring.stat.SpringMethodStatValue;
+
+public interface MonitorDao {
+
+ void saveSql(MonitorContext ctx, List sqlList);
+
+ void saveSpringMethod(MonitorContext ctx, List methodList);
+
+ void saveWebURI(MonitorContext ctx, List uriList);
+}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java
new file mode 100644
index 0000000000..1a1683eed2
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java
@@ -0,0 +1,27 @@
+package com.alibaba.druid.support.monitor.dao;
+
+import java.util.List;
+
+import com.alibaba.druid.stat.JdbcSqlStatValue;
+import com.alibaba.druid.support.http.stat.WebURIStatValue;
+import com.alibaba.druid.support.monitor.MonitorContext;
+import com.alibaba.druid.support.spring.stat.SpringMethodStatValue;
+
+public class MonitorDaoJdbcImpl implements MonitorDao {
+
+ @Override
+ public void saveSql(MonitorContext ctx, List sqlList) {
+
+ }
+
+ @Override
+ public void saveSpringMethod(MonitorContext ctx, List methodList) {
+
+ }
+
+ @Override
+ public void saveWebURI(MonitorContext ctx, List uriList) {
+
+ }
+
+}