This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit aef846b906598dba72be2f8edccc02de70e54d24
Author: zhengyangyong <[email protected]>
AuthorDate: Mon Feb 12 11:26:13 2018 +0800

    SCB-327 remove spring dependency and use SPI mechanism
    
    Signed-off-by: zhengyangyong <[email protected]>
---
 .../demo/springmvc/client/SpringmvcClient.java     |  2 +-
 .../org/apache/servicecomb/demo/perf/PerfMain.java |  6 +-
 .../demo/perf/PerfMetricsFilePublisher.java        |  6 +-
 .../health/DefaultHealthCheckerManager.java        | 61 --------------------
 .../metrics/health/HealthCheckerManager.java       | 26 +++++++--
 .../metrics/health/TestHealthCheckerManager.java   |  7 +--
 .../servicecomb/metrics/core/DataSource.java       | 65 ---------------------
 ...faultDataSource.java => MetricsDataSource.java} | 66 +++++++++++++++++-----
 .../core/event/DefaultEventListenerManager.java    | 40 -------------
 .../metrics/core/event/EventListenerManager.java   | 14 ++++-
 .../health/DefaultMicroserviceHealthChecker.java   |  2 -
 .../metrics/core/monitor/RegistryMonitor.java      | 25 +++++---
 ...rPublisher.java => HealthCheckerPublisher.java} | 24 +++++++-
 ...MetricsPublisher.java => MetricsPublisher.java} | 16 +++---
 ....servicecomb.metrics.core.monitor.SystemMonitor | 18 ++++++
 .../metrics/core/TestEventAndRunner.java           | 21 +++----
 .../metrics/core/TestHealthCheckerPublisher.java   |  4 +-
 .../metrics/core/TestMetricsPublisher.java         |  7 +--
 .../metrics/prometheus/MetricsCollector.java       | 15 +----
 ...icsPublisher.java => MetricsHttpPublisher.java} | 14 ++---
 ...kerAnnotation.java => CustomHealthChecker.java} |  6 +-
 .../SomeServiceWithHealthCheckerManager.java       | 35 ------------
 ...icecomb.foundation.metrics.health.HealthChecker | 19 +++++++
 .../samples/mwf/WriteFileInitializer.java          | 13 ++---
 24 files changed, 206 insertions(+), 306 deletions(-)

diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index 70904b8..5298f16 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -105,7 +105,7 @@ public class SpringmvcClient {
       TestMgr.check(true, metrics.size() > 0);
       TestMgr.check(true, metrics.get(
           
"servicecomb.invocation(operation=springmvc.codeFirst.saySomething,role=producer,stage=whole,statistic=count,status=200)")
-          > 0);
+          >= 0);
     } catch (Exception e) {
       TestMgr.check("true", "false");
     }
diff --git 
a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java 
b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
index f85d08d..16a0bed 100644
--- a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
+++ b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
@@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.foundation.vertx.VertxUtils;
-import org.apache.servicecomb.metrics.core.DataSource;
+import org.apache.servicecomb.metrics.core.MetricsDataSource;
 
 public class PerfMain {
 
@@ -35,8 +35,8 @@ public class PerfMain {
     RedisClientUtils.init(VertxUtils.getOrCreateVertxByName("transport", 
null));
 
     // metrics
-    DataSource dataSource = BeanUtils.getContext().getBean(DataSource.class);
-    PerfMetricsFilePublisher metricsLog = new 
PerfMetricsFilePublisher(dataSource);
+    //DataSource dataSource = BeanUtils.getContext().getBean(Def.class);
+    PerfMetricsFilePublisher metricsLog = new 
PerfMetricsFilePublisher(MetricsDataSource.getInstance());
     
Executors.newScheduledThreadPool(1).scheduleWithFixedDelay(metricsLog::onCycle, 
0, 1, TimeUnit.SECONDS);
 
     List<String> argList = Arrays.asList(args);
diff --git 
a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
 
b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
index a56bb0b..f17b04d 100644
--- 
a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
+++ 
b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
@@ -23,7 +23,7 @@ import org.apache.servicecomb.foundation.metrics.MetricsConst;
 import org.apache.servicecomb.foundation.metrics.publish.MetricNode;
 import org.apache.servicecomb.foundation.metrics.publish.MetricsLoader;
 import org.apache.servicecomb.foundation.vertx.VertxUtils;
-import org.apache.servicecomb.metrics.core.DataSource;
+import org.apache.servicecomb.metrics.core.MetricsDataSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,9 +34,9 @@ import io.vertx.core.impl.VertxImplEx;
 public class PerfMetricsFilePublisher {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(PerfMetricsFilePublisher.class);
 
-  private DataSource dataSource;
+  private MetricsDataSource dataSource;
 
-  public PerfMetricsFilePublisher(DataSource dataSource) {
+  public PerfMetricsFilePublisher(MetricsDataSource dataSource) {
     this.dataSource = dataSource;
   }
 
diff --git 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/DefaultHealthCheckerManager.java
 
b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/DefaultHealthCheckerManager.java
deleted file mode 100644
index 9e19e84..0000000
--- 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/DefaultHealthCheckerManager.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.foundation.metrics.health;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class DefaultHealthCheckerManager implements HealthCheckerManager {
-  private final Map<String, HealthChecker> healthCheckers;
-
-  @Autowired(required = false)
-  public DefaultHealthCheckerManager(List<HealthChecker> springHealthCheckers) 
{
-    this.healthCheckers = new ConcurrentHashMap<>();
-    if (springHealthCheckers != null && !springHealthCheckers.isEmpty()) {
-      for (HealthChecker checker : springHealthCheckers) {
-        this.healthCheckers.put(checker.getName(), checker);
-      }
-    }
-  }
-
-  @Override
-  public void register(HealthChecker checker) {
-    healthCheckers.put(checker.getName(), checker);
-  }
-
-  @Override
-  public Map<String, HealthCheckResult> check() {
-    return 
healthCheckers.entrySet().stream().collect(Collectors.toMap(Entry::getKey, e -> 
e.getValue().check()));
-  }
-
-  @Override
-  public HealthCheckResult check(String name) {
-    HealthChecker checker = healthCheckers.get(name);
-    if (checker != null) {
-      return checker.check();
-    }
-    return null;
-  }
-}
diff --git 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/HealthCheckerManager.java
 
b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/HealthCheckerManager.java
index 776b815..249f129 100644
--- 
a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/HealthCheckerManager.java
+++ 
b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/health/HealthCheckerManager.java
@@ -18,12 +18,30 @@
 package org.apache.servicecomb.foundation.metrics.health;
 
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
+public class HealthCheckerManager {
+  private final Map<String, HealthChecker> healthCheckers;
 
-public interface HealthCheckerManager {
-  void register(HealthChecker checker);
+  public HealthCheckerManager() {
+    this.healthCheckers = new ConcurrentHashMap<>();
+  }
 
-  Map<String, HealthCheckResult> check();
+  public void register(HealthChecker checker) {
+    healthCheckers.put(checker.getName(), checker);
+  }
 
-  HealthCheckResult check(String name);
+  public Map<String, HealthCheckResult> check() {
+    return 
healthCheckers.entrySet().stream().collect(Collectors.toMap(Entry::getKey, e -> 
e.getValue().check()));
+  }
+
+  public HealthCheckResult check(String name) {
+    HealthChecker checker = healthCheckers.get(name);
+    if (checker != null) {
+      return checker.check();
+    }
+    return null;
+  }
 }
diff --git 
a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
 
b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
index 40b653c..c37d7c7 100644
--- 
a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
+++ 
b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
@@ -17,8 +17,6 @@
 
 package org.apache.servicecomb.foundation.metrics.health;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
 import org.junit.Assert;
@@ -28,10 +26,7 @@ public class TestHealthCheckerManager {
 
   @Test
   public void testRegistry() {
-
-    List<HealthChecker> checkers = new ArrayList<>();
-
-    HealthCheckerManager manager = new DefaultHealthCheckerManager(checkers);
+    HealthCheckerManager manager = new HealthCheckerManager();
 
     manager.register(new HealthChecker() {
       @Override
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DataSource.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DataSource.java
deleted file mode 100644
index ce21faf..0000000
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DataSource.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.metrics.core;
-
-import java.util.List;
-import java.util.Map;
-
-public interface DataSource {
-
-  /**  What's the WindowTime ?
-   We all know there are two major type of metric :
-   1.Time-unrelated,you can get the latest value any time immediately:
-   Counter -> increase or decrease
-   Guage -> set a certain one value
-   2.Time-related,only after a centain time pass you can compute the right 
value,"a centain time" called WindowTime
-   Max & Min -> the max value or min value in a centain time
-   Average -> average value, the simplest algorithm is f = sum / count
-   Rate -> like TPS,algorithm is f = sum / second
-
-   Will be return "servicecomb.metrics.window_time" setting in 
microservice.yaml
-   */
-  List<Long> getAppliedWindowTime();
-
-  //same as call measure(getAppliedWindowTime().get(0),false)
-  Map<String, Double> measure();
-
-  //same as call measure(windowTime,false)
-  Map<String, Double> measure(long windowTime);
-
-  /**
-   * windowTime usage example:
-   * if there is two window time set in "servicecomb.metrics.window_time" like 
1000,2000
-   * then windowTime = 1000 will return result of the setting 1000(1 second)
-   * windowTime = 2000 will return result of the setting 2000(2 second)
-   *
-   * there are three monitor of max,min,total
-   * 0----------1----------2----------3----------  <-time line (second)
-   *   100,200    300,400                          <-value record
-   *
-   *                 ↑ measure(1000) will return max=200 min=100 total=300
-   *                   measure(2000) will return max=0 min=0 total=0
-   *                             ↑ measure(1000) will return max=300 min=400 
total=700
-   *                               measure(2000) will return max=400 min=100 
total=1000
-   *
-   * @param windowTime getAppliedWindowTime() item
-   * @param calculateLatency need output latency
-   * @return Map<String , Double>
-   */
-  Map<String, Double> measure(long windowTime, boolean calculateLatency);
-}
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultDataSource.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsDataSource.java
similarity index 57%
rename from 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultDataSource.java
rename to 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsDataSource.java
index 30241c8..3854456 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultDataSource.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsDataSource.java
@@ -28,26 +28,32 @@ import java.util.Set;
 import 
org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
 import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import com.google.common.collect.Lists;
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.servo.util.Strings;
 
-@Component
-public class DefaultDataSource implements DataSource {
-  private final RegistryMonitor registryMonitor;
+public class MetricsDataSource {
+  private RegistryMonitor registryMonitor;
 
-  private final Map<Long, Integer> appliedWindowTimes = new HashMap<>();
+  private Map<Long, Integer> appliedWindowTimes = new HashMap<>();
 
-  @Autowired
-  public DefaultDataSource(RegistryMonitor registryMonitor) {
-    this(registryMonitor,
-        
DynamicPropertyFactory.getInstance().getStringProperty(MetricsConfig.METRICS_POLLING_TIME,
 "5000").get());
+  private static final MetricsDataSource INSTANCE = new MetricsDataSource();
+
+  public static MetricsDataSource getInstance() {
+    return INSTANCE;
+  }
+
+  private MetricsDataSource() {
+    this.init(RegistryMonitor.getInstance(), DynamicPropertyFactory
+        .getInstance().getStringProperty(MetricsConfig.METRICS_POLLING_TIME, 
"5000").get());
   }
 
-  public DefaultDataSource(RegistryMonitor registryMonitor, String 
pollingSettings) {
+  public MetricsDataSource(RegistryMonitor registryMonitor, String 
pollingSettings) {
+    this.init(registryMonitor, pollingSettings);
+  }
+
+  private void init(RegistryMonitor registryMonitor, String pollingSettings) {
     this.registryMonitor = registryMonitor;
 
     String[] pollingSettingStrings = pollingSettings.split(",");
@@ -73,22 +79,52 @@ public class DefaultDataSource implements DataSource {
     }
   }
 
-  @Override
+
+  /**  What's the WindowTime ?
+   We all know there are two major type of metric :
+   1.Time-unrelated,you can get the latest value any time immediately:
+   Counter -> increase or decrease
+   Guage -> set a certain one value
+   2.Time-related,only after a centain time pass you can compute the right 
value,"a centain time" called WindowTime
+   Max & Min -> the max value or min value in a centain time
+   Average -> average value, the simplest algorithm is f = sum / count
+   Rate -> like TPS,algorithm is f = sum / second
+
+   Will be return "servicecomb.metrics.window_time" setting in 
microservice.yaml
+   */
   public List<Long> getAppliedWindowTime() {
     return Lists.newArrayList(appliedWindowTimes.keySet());
   }
 
-  @Override
+  //same as call measure(getAppliedWindowTime().get(0),false)
   public Map<String, Double> measure() {
     return measure(getAppliedWindowTime().get(0));
   }
 
-  @Override
+  //same as call measure(windowTime,false)
   public Map<String, Double> measure(long windowTime) {
     return measure(windowTime, false);
   }
 
-  @Override
+  /**
+   * windowTime usage example:
+   * if there is two window time set in "servicecomb.metrics.window_time" like 
1000,2000
+   * then windowTime = 1000 will return result of the setting 1000(1 second)
+   * windowTime = 2000 will return result of the setting 2000(2 second)
+   *
+   * there are three monitor of max,min,total
+   * 0----------1----------2----------3----------  <-time line (second)
+   *   100,200    300,400                          <-value record
+   *
+   *                 ↑ measure(1000) will return max=200 min=100 total=300
+   *                   measure(2000) will return max=0 min=0 total=0
+   *                             ↑ measure(1000) will return max=300 min=400 
total=700
+   *                               measure(2000) will return max=400 min=100 
total=1000
+   *
+   * @param windowTime getAppliedWindowTime() item
+   * @param calculateLatency need output latency
+   * @return Map<String               ,               Double>
+   */
   public Map<String, Double> measure(long windowTime, boolean 
calculateLatency) {
     Integer index = appliedWindowTimes.get(windowTime);
     if (index != null) {
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/DefaultEventListenerManager.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/DefaultEventListenerManager.java
deleted file mode 100644
index 42aa024..0000000
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/DefaultEventListenerManager.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.metrics.core.event;
-
-import org.apache.servicecomb.foundation.common.event.EventListener;
-import org.apache.servicecomb.foundation.common.utils.EventUtils;
-import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class DefaultEventListenerManager implements EventListenerManager {
-
-  @Autowired
-  public DefaultEventListenerManager(RegistryMonitor registryMonitor) {
-    this.registerEventListener(new 
InvocationStartedEventListener(registryMonitor));
-    this.registerEventListener(new 
InvocationStartProcessingEventListener(registryMonitor));
-    this.registerEventListener(new 
InvocationFinishedEventListener(registryMonitor));
-  }
-
-  @Override
-  public void registerEventListener(EventListener listener) {
-    EventUtils.registerEventListener(listener);
-  }
-}
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/EventListenerManager.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/EventListenerManager.java
index a381b47..da4af45 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/EventListenerManager.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/EventListenerManager.java
@@ -18,7 +18,17 @@
 package org.apache.servicecomb.metrics.core.event;
 
 import org.apache.servicecomb.foundation.common.event.EventListener;
+import org.apache.servicecomb.foundation.common.utils.EventUtils;
+import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
 
-public interface EventListenerManager {
-  void registerEventListener(EventListener listener);
+public class EventListenerManager {
+  public EventListenerManager(RegistryMonitor registryMonitor) {
+    this.registerEventListener(new 
InvocationStartedEventListener(registryMonitor));
+    this.registerEventListener(new 
InvocationStartProcessingEventListener(registryMonitor));
+    this.registerEventListener(new 
InvocationFinishedEventListener(registryMonitor));
+  }
+
+  public void registerEventListener(EventListener listener) {
+    EventUtils.registerEventListener(listener);
+  }
 }
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
index fb9185d..03e2913 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
@@ -28,9 +28,7 @@ import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
 
-@Component
 public class DefaultMicroserviceHealthChecker implements HealthChecker {
 
   private static Logger logger = 
LoggerFactory.getLogger(DefaultMicroserviceHealthChecker.class);
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/RegistryMonitor.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/RegistryMonitor.java
index 1cbaae4..4607d59 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/RegistryMonitor.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/RegistryMonitor.java
@@ -21,20 +21,31 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 
-@Component
 public class RegistryMonitor {
 
-  private final SystemMonitor systemMonitor;
+  private SystemMonitor systemMonitor;
 
-  private final Map<String, ConsumerInvocationMonitor> 
consumerInvocationMonitors;
+  private Map<String, ConsumerInvocationMonitor> consumerInvocationMonitors;
 
-  private final Map<String, ProducerInvocationMonitor> 
producerInvocationMonitors;
+  private Map<String, ProducerInvocationMonitor> producerInvocationMonitors;
+
+  private static final RegistryMonitor INSTANCE = new RegistryMonitor();
+
+  public static RegistryMonitor getInstance() {
+    return INSTANCE;
+  }
+
+  private RegistryMonitor() {
+    init(SPIServiceUtils.getTargetService(SystemMonitor.class));
+  }
 
-  @Autowired
   public RegistryMonitor(SystemMonitor systemMonitor) {
+    init(systemMonitor);
+  }
+
+  private void init(SystemMonitor systemMonitor) {
     this.systemMonitor = systemMonitor;
     this.consumerInvocationMonitors = new ConcurrentHashMapEx<>();
     this.producerInvocationMonitors = new ConcurrentHashMapEx<>();
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultHealthCheckerPublisher.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
similarity index 71%
rename from 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultHealthCheckerPublisher.java
rename to 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
index e0de808..792eb36 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultHealthCheckerPublisher.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
@@ -17,10 +17,14 @@
 
 package org.apache.servicecomb.metrics.core.publish;
 
+import java.util.List;
 import java.util.Map;
 
+import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckResult;
+import org.apache.servicecomb.foundation.metrics.health.HealthChecker;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
+import 
org.apache.servicecomb.metrics.core.health.DefaultMicroserviceHealthChecker;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -32,12 +36,26 @@ import io.swagger.annotations.ApiResponses;
 
 @RestSchema(schemaId = "healthEndpoint")
 @RequestMapping(path = "/health")
-public class DefaultHealthCheckerPublisher {
+public class HealthCheckerPublisher {
 
-  private final HealthCheckerManager manager;
+  private HealthCheckerManager manager;
 
-  public DefaultHealthCheckerPublisher(HealthCheckerManager manager) {
+  public HealthCheckerPublisher() {
+    init(new HealthCheckerManager());
+  }
+
+  public HealthCheckerPublisher(HealthCheckerManager manager) {
+    init(manager);
+  }
+
+  private void init(HealthCheckerManager manager) {
     this.manager = manager;
+
+    this.manager.register(new DefaultMicroserviceHealthChecker());
+    List<HealthChecker> checkers = 
SPIServiceUtils.getAllService(HealthChecker.class);
+    for (HealthChecker checker : checkers) {
+      this.manager.register(checker);
+    }
   }
 
   @RequestMapping(path = "/", method = RequestMethod.GET)
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
similarity index 80%
rename from 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
rename to 
metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
index 5d8385a..1369323 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/MetricsPublisher.java
@@ -19,9 +19,10 @@ package org.apache.servicecomb.metrics.core.publish;
 
 import java.util.Map;
 
-import org.apache.servicecomb.metrics.core.DataSource;
+import org.apache.servicecomb.metrics.core.MetricsDataSource;
+import org.apache.servicecomb.metrics.core.event.EventListenerManager;
+import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -31,13 +32,10 @@ import io.swagger.annotations.ApiResponses;
 
 @RestSchema(schemaId = "metricsEndpoint")
 @RequestMapping(path = "/metrics")
-public class DefaultMetricsPublisher {
+public class MetricsPublisher {
 
-  private final DataSource dataSource;
-
-  @Autowired
-  public DefaultMetricsPublisher(DataSource dataSource) {
-    this.dataSource = dataSource;
+  public MetricsPublisher() {
+    new EventListenerManager(RegistryMonitor.getInstance());
   }
 
   @ApiResponses({
@@ -46,6 +44,6 @@ public class DefaultMetricsPublisher {
   @RequestMapping(path = "/", method = RequestMethod.GET)
   @CrossOrigin
   public Map<String, Double> metrics() {
-    return dataSource.measure();
+    return MetricsDataSource.getInstance().measure();
   }
 }
diff --git 
a/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.metrics.core.monitor.SystemMonitor
 
b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.metrics.core.monitor.SystemMonitor
new file mode 100644
index 0000000..792668d
--- /dev/null
+++ 
b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.metrics.core.monitor.SystemMonitor
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.servicecomb.metrics.core.monitor.DefaultSystemMonitor
\ No newline at end of file
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
index b6ee521..00e02fd 100644
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
@@ -36,7 +36,7 @@ import 
org.apache.servicecomb.foundation.common.utils.EventUtils;
 import org.apache.servicecomb.foundation.metrics.MetricsConst;
 import org.apache.servicecomb.foundation.metrics.publish.MetricNode;
 import org.apache.servicecomb.foundation.metrics.publish.MetricsLoader;
-import org.apache.servicecomb.metrics.core.event.DefaultEventListenerManager;
+import org.apache.servicecomb.metrics.core.event.EventListenerManager;
 import org.apache.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
 import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
@@ -68,13 +68,13 @@ public class TestEventAndRunner {
 
     DefaultSystemMonitor systemMonitor = new 
DefaultSystemMonitor(systemMXBean, threadMXBean, memoryMXBean);
     RegistryMonitor monitor = new RegistryMonitor(systemMonitor);
-    DefaultDataSource dataSource = new DefaultDataSource(monitor, 
"1000,2000,3000");
+    MetricsDataSource dataSource = new MetricsDataSource(monitor, 
"1000,2000,4000");
 
     List<Long> intervals = dataSource.getAppliedWindowTime();
     Assert.assertEquals(intervals.size(), 3);
-    Assert.assertThat(intervals, containsInAnyOrder(Arrays.asList(1000L, 
2000L, 3000L).toArray()));
+    Assert.assertThat(intervals, containsInAnyOrder(Arrays.asList(1000L, 
2000L, 4000L).toArray()));
 
-    new DefaultEventListenerManager(monitor);
+    new EventListenerManager(monitor);
 
     
//==========================================================================
     //fun1 is a PRODUCER invocation call 2 time and all is completed
@@ -121,10 +121,11 @@ public class TestEventAndRunner {
 
     
//==========================================================================
 
-    //sim lease one window time
-    Thread.sleep(1000);
+    //sim at lease one window time
+    //increase up to 4 seconds in order to prevent low-probability test failed 
on ci
+    Thread.sleep(4000);
 
-    Map<String, Double> metrics = dataSource.measure(1000, true);
+    Map<String, Double> metrics = dataSource.measure(4000, true);
 
     MetricsLoader loader = new MetricsLoader(metrics);
 
@@ -164,9 +165,9 @@ public class TestEventAndRunner {
     Assert.assertEquals(700, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("max"), 
0);
     Assert.assertEquals(1, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("count"),
 0);
     Assert.assertEquals(700, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("totalTime"),
 0);
-    Assert.assertEquals(2, 
node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 
0);
+    Assert.assertEquals(0.5, 
node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 
0);
     Assert.assertEquals(2, 
node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("totalCount"),
 0);
-    Assert.assertEquals(1, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("tps"), 
0);
+    Assert.assertEquals(0.25, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("tps"), 
0);
     Assert.assertEquals(1, 
node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("totalCount"),
 0);
 
     //check ConsumerMetrics
@@ -177,7 +178,7 @@ public class TestEventAndRunner {
     Assert.assertEquals(300, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("max"), 
0);
     Assert.assertEquals(1, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("count"),
 0);
     Assert.assertEquals(300, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("totalTime"),
 0);
-    Assert.assertEquals(1, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 
0);
+    Assert.assertEquals(0.25, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 
0);
     Assert.assertEquals(1, 
node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("totalCount"),
 0);
 
     //fun3
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
index 1764e52..3585193 100644
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
@@ -30,7 +30,7 @@ import 
org.apache.servicecomb.foundation.metrics.health.HealthChecker;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
 import org.apache.servicecomb.metrics.core.health.DefaultHealthCheckExtraData;
 import 
org.apache.servicecomb.metrics.core.health.DefaultMicroserviceHealthChecker;
-import 
org.apache.servicecomb.metrics.core.publish.DefaultHealthCheckerPublisher;
+import org.apache.servicecomb.metrics.core.publish.HealthCheckerPublisher;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
@@ -78,7 +78,7 @@ public class TestHealthCheckerPublisher {
     when(manager.check()).thenReturn(results);
     when(manager.check("default")).thenReturn(result.check());
 
-    DefaultHealthCheckerPublisher publisher = new 
DefaultHealthCheckerPublisher(manager);
+    HealthCheckerPublisher publisher = new HealthCheckerPublisher(manager);
     Map<String, HealthCheckResult> content = publisher.health();
 
     DefaultHealthCheckExtraData data = JsonUtils.OBJ_MAPPER
diff --git 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
index 096e2da..48211ed 100644
--- 
a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
+++ 
b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
@@ -19,17 +19,14 @@ package org.apache.servicecomb.metrics.core;
 
 import java.util.Map;
 
-import org.apache.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
-import org.apache.servicecomb.metrics.core.monitor.RegistryMonitor;
-import org.apache.servicecomb.metrics.core.publish.DefaultMetricsPublisher;
+import org.apache.servicecomb.metrics.core.publish.MetricsPublisher;
 import org.junit.Assert;
 import org.junit.Test;
 
 public class TestMetricsPublisher {
   @Test
   public void test() {
-    DefaultMetricsPublisher publisher = new DefaultMetricsPublisher(
-        new DefaultDataSource(new RegistryMonitor(new 
DefaultSystemMonitor())));
+    MetricsPublisher publisher = new MetricsPublisher();
     Map<String, Double> metrics = publisher.metrics();
     //10 jvm metrics get
     Assert.assertEquals(10, metrics.size());
diff --git 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
index 10cbd36..c3bf275 100644
--- 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
+++ 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
@@ -23,23 +23,13 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.apache.servicecomb.foundation.metrics.MetricsConst;
-import org.apache.servicecomb.metrics.core.DataSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.apache.servicecomb.metrics.core.MetricsDataSource;
 
 import io.prometheus.client.Collector;
 import io.prometheus.client.Collector.MetricFamilySamples.Sample;
 
-@Component
 public class MetricsCollector extends Collector implements 
Collector.Describable {
 
-  private final DataSource dataSource;
-
-  @Autowired
-  public MetricsCollector(DataSource dataSource) {
-    this.dataSource = dataSource;
-  }
-
   @Override
   public List<MetricFamilySamples> collect() {
     return load();
@@ -51,7 +41,8 @@ public class MetricsCollector extends Collector implements 
Collector.Describable
   }
 
   private List<MetricFamilySamples> load() {
-    Map<String, Double> registryMetric = 
dataSource.measure(dataSource.getAppliedWindowTime().get(0), true);
+    Map<String, Double> registryMetric = MetricsDataSource.getInstance()
+        
.measure(MetricsDataSource.getInstance().getAppliedWindowTime().get(0), true);
     List<MetricFamilySamples> familySamples = new ArrayList<>();
 
     List<Sample> samples = new ArrayList<>();
diff --git 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsPublisher.java
 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsHttpPublisher.java
similarity index 86%
rename from 
metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsPublisher.java
rename to 
metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsHttpPublisher.java
index af99b52..7187467 100644
--- 
a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsPublisher.java
+++ 
b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsHttpPublisher.java
@@ -23,7 +23,6 @@ import java.net.InetSocketAddress;
 import 
org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextClosedEvent;
@@ -35,21 +34,18 @@ import io.prometheus.client.CollectorRegistry;
 import io.prometheus.client.exporter.HTTPServer;
 
 @Component
-public class MetricsPublisher implements ApplicationListener<ApplicationEvent> 
{
-  private static final Logger LOGGER = 
LoggerFactory.getLogger(MetricsPublisher.class);
+public class MetricsHttpPublisher implements 
ApplicationListener<ApplicationEvent> {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(MetricsHttpPublisher.class);
 
   private static final String METRICS_PROMETHEUS_PORT = 
"servicecomb.metrics.prometheus.port";
 
-  private final MetricsCollector metricsCollector;
-
   private HTTPServer httpServer;
 
-  @Autowired
-  public MetricsPublisher(MetricsCollector metricsCollector) {
+  public MetricsHttpPublisher() {
     //prometheus default port allocation is here : 
https://github.com/prometheus/prometheus/wiki/Default-port-allocations
     int publishPort = 
DynamicPropertyFactory.getInstance().getIntProperty(METRICS_PROMETHEUS_PORT, 
9696).get();
-    this.metricsCollector = metricsCollector;
-    this.metricsCollector.register();
+    MetricsCollector metricsCollector = new MetricsCollector();
+    metricsCollector.register();
     try {
       this.httpServer = new HTTPServer(new InetSocketAddress(publishPort), 
CollectorRegistry.defaultRegistry, true);
       LOGGER.info("Prometheus httpServer listened {}.", publishPort);
diff --git 
a/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
 
b/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
similarity index 85%
rename from 
samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
rename to 
samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
index 27688d0..bd53aa0 100644
--- 
a/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
+++ 
b/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
@@ -19,11 +19,9 @@ package 
org.apache.servicecomb.samples.metrics.extendhealthcheck;
 
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckResult;
 import org.apache.servicecomb.foundation.metrics.health.HealthChecker;
-import org.springframework.stereotype.Component;
 
-//this health check will auto register because spring bean annotation
-@Component
-public class CustomHealthCheckerAnnotation implements HealthChecker {
+
+public class CustomHealthChecker implements HealthChecker {
   @Override
   public String getName() {
     return "custom";
diff --git 
a/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/SomeServiceWithHealthCheckerManager.java
 
b/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/SomeServiceWithHealthCheckerManager.java
deleted file mode 100644
index 42e3064..0000000
--- 
a/samples/metrics-extend-healthcheck/src/main/java/org/apache/servicecomb/samples/metrics/extendhealthcheck/SomeServiceWithHealthCheckerManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.samples.metrics.extendhealthcheck;
-
-import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class SomeServiceWithHealthCheckerManager {
-
-  private final HealthCheckerManager manager;
-
-  @Autowired
-  public SomeServiceWithHealthCheckerManager(HealthCheckerManager manager) {
-    this.manager = manager;
-
-    this.manager.register(new MySqlHealthChecker());
-  }
-}
diff --git 
a/samples/metrics-extend-healthcheck/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.health.HealthChecker
 
b/samples/metrics-extend-healthcheck/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.health.HealthChecker
new file mode 100644
index 0000000..f6b0794
--- /dev/null
+++ 
b/samples/metrics-extend-healthcheck/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.health.HealthChecker
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.servicecomb.samples.metrics.extendhealthcheck.CustomHealthChecker
+org.apache.servicecomb.samples.metrics.extendhealthcheck.MySqlHealthChecker
\ No newline at end of file
diff --git 
a/samples/metrics-write-file-sample/metrics-write-file/src/main/java/org/apache/servicecomb/samples/mwf/WriteFileInitializer.java
 
b/samples/metrics-write-file-sample/metrics-write-file/src/main/java/org/apache/servicecomb/samples/mwf/WriteFileInitializer.java
index 7837a65..a91ced6 100644
--- 
a/samples/metrics-write-file-sample/metrics-write-file/src/main/java/org/apache/servicecomb/samples/mwf/WriteFileInitializer.java
+++ 
b/samples/metrics-write-file-sample/metrics-write-file/src/main/java/org/apache/servicecomb/samples/mwf/WriteFileInitializer.java
@@ -24,8 +24,8 @@ import java.util.concurrent.Executors;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.foundation.common.net.NetUtils;
-import org.apache.servicecomb.metrics.core.DataSource;
 import org.apache.servicecomb.metrics.core.MetricsConfig;
+import org.apache.servicecomb.metrics.core.MetricsDataSource;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,8 +41,6 @@ public class WriteFileInitializer {
 
   private FileContentFormatter formatter;
 
-  private final DataSource dataSource;
-
   private final MetricsFileWriter fileWriter;
 
   private String filePrefix;
@@ -50,17 +48,15 @@ public class WriteFileInitializer {
   private String hostName;
 
   @Autowired
-  public WriteFileInitializer(MetricsFileWriter fileWriter, DataSource 
dataSource) {
+  public WriteFileInitializer(MetricsFileWriter fileWriter) {
     metricPoll = 
DynamicPropertyFactory.getInstance().getIntProperty(MetricsConfig.METRICS_POLLING_TIME,
 5000).get();
     this.fileWriter = fileWriter;
-    this.dataSource = dataSource;
     this.convertor = new SimpleFileContentConvertor();
   }
 
-  public WriteFileInitializer(MetricsFileWriter fileWriter, DataSource 
dataSource, String hostName, String filePrefix) {
+  public WriteFileInitializer(MetricsFileWriter fileWriter, String hostName, 
String filePrefix) {
     metricPoll = 
DynamicPropertyFactory.getInstance().getIntProperty(MetricsConfig.METRICS_POLLING_TIME,
 5000).get();
     this.fileWriter = fileWriter;
-    this.dataSource = dataSource;
     this.hostName = hostName;
     this.filePrefix = filePrefix;
     this.convertor = new SimpleFileContentConvertor();
@@ -87,7 +83,8 @@ public class WriteFileInitializer {
   }
 
   private void run() {
-    Map<String, Double> registryMetric = 
dataSource.measure(dataSource.getAppliedWindowTime().get(0), true);
+    Map<String, Double> registryMetric = MetricsDataSource.getInstance()
+        
.measure(MetricsDataSource.getInstance().getAppliedWindowTime().get(0), true);
     Map<String, String> convertedMetrics = convertor.convert(registryMetric);
     Map<String, String> formattedMetrics = formatter.format(convertedMetrics);
 

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to