[ 
https://issues.apache.org/jira/browse/SCB-910?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16621415#comment-16621415
 ] 

ASF GitHub Bot commented on SCB-910:
------------------------------------

liubao68 closed pull request #906: [SCB-910] add pom for support spring boot 2.0
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/906
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/core/src/main/resources/META-INF/spring/cse.bean.xml 
b/core/src/main/resources/META-INF/spring/cse.bean.xml
index 463e10dd4..b24ab137e 100644
--- a/core/src/main/resources/META-INF/spring/cse.bean.xml
+++ b/core/src/main/resources/META-INF/spring/cse.bean.xml
@@ -19,7 +19,7 @@
 <beans xmlns="http://www.springframework.org/schema/beans"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xmlns:context="http://www.springframework.org/schema/context";
   xsi:schemaLocation="
-               http://www.springframework.org/schema/beans 
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd 
+               http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd";>
   <context:annotation-config/>
   <!-- <context:spring-configured /> -->
diff --git 
a/foundations/foundation-config/src/main/resources/META-INF/spring/cse.bean.xml 
b/foundations/foundation-config/src/main/resources/META-INF/spring/cse.bean.xml
index f22bd7bb3..952cfc037 100644
--- 
a/foundations/foundation-config/src/main/resources/META-INF/spring/cse.bean.xml
+++ 
b/foundations/foundation-config/src/main/resources/META-INF/spring/cse.bean.xml
@@ -19,9 +19,7 @@
 <beans xmlns="http://www.springframework.org/schema/beans";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="
-               http://www.springframework.org/schema/beans
-               
classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
-  <bean class="org.apache.servicecomb.config.ConfigurationSpringInitializer">
-  </bean>
+               http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>
+  <bean class="org.apache.servicecomb.config.ConfigurationSpringInitializer"/>
   <bean class="org.apache.servicecomb.config.DynamicPropertiesImpl"/>
 </beans>
diff --git 
a/foundations/foundation-vertx/src/main/resources/META-INF/spring/cse.bean.xml 
b/foundations/foundation-vertx/src/main/resources/META-INF/spring/cse.bean.xml
index 1b049fb88..908d9ce19 100644
--- 
a/foundations/foundation-vertx/src/main/resources/META-INF/spring/cse.bean.xml
+++ 
b/foundations/foundation-vertx/src/main/resources/META-INF/spring/cse.bean.xml
@@ -18,11 +18,8 @@
 
 <beans xmlns="http://www.springframework.org/schema/beans";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  xsi:schemaLocation="
-        http://www.springframework.org/schema/beans
-        classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
+  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>
 
-  <bean id="cse.executor.vertx-worker"
-    
class="org.apache.servicecomb.foundation.vertx.executor.VertxWorkerExecutor"></bean>
+  <bean id="cse.executor.vertx-worker" 
class="org.apache.servicecomb.foundation.vertx.executor.VertxWorkerExecutor"/>
 
 </beans>
diff --git 
a/handlers/handler-bizkeeper/src/main/resources/META-INF/spring/cse.bean.xml 
b/handlers/handler-bizkeeper/src/main/resources/META-INF/spring/cse.bean.xml
index d7133dcce..a362a92fb 100644
--- a/handlers/handler-bizkeeper/src/main/resources/META-INF/spring/cse.bean.xml
+++ b/handlers/handler-bizkeeper/src/main/resources/META-INF/spring/cse.bean.xml
@@ -18,7 +18,7 @@
 
 <beans xmlns="http://www.springframework.org/schema/beans";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  xsi:schemaLocation="http://www.springframework.org/schema/beans 
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
+  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>
 
   <bean class="org.apache.servicecomb.bizkeeper.BeansHolder" 
init-method="init"/>
 </beans>
diff --git 
a/handlers/handler-loadbalance/src/main/resources/META-INF/spring/cse.bean.xml 
b/handlers/handler-loadbalance/src/main/resources/META-INF/spring/cse.bean.xml
index 139b51e76..795358074 100644
--- 
a/handlers/handler-loadbalance/src/main/resources/META-INF/spring/cse.bean.xml
+++ 
b/handlers/handler-loadbalance/src/main/resources/META-INF/spring/cse.bean.xml
@@ -17,10 +17,9 @@
   -->
 
 <beans xmlns="http://www.springframework.org/schema/beans";
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:context="http://www.springframework.org/schema/context";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="
-               http://www.springframework.org/schema/beans 
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd 
-               http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd";>
+               http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>
 
   <bean class="org.apache.servicecomb.loadbalance.BeansHolder" 
init-method="init"/>
 </beans>
diff --git 
a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/CommandReceiver.java
 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/CommandReceiver.java
index 08c6bbb68..55d9e6667 100644
--- 
a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/CommandReceiver.java
+++ 
b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/CommandReceiver.java
@@ -92,6 +92,10 @@ protected void stop() {
         }
         ITUtils.forceWait(TimeUnit.SECONDS, 1);
       }
+
+      //make sure kill for servlet
+      System.exit(0);
+
     }, "it-stop").start();
   }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
index 22113d401..b179ac657 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
@@ -98,12 +98,17 @@ protected static void run() throws Throwable {
     // 3.deploy development mode producer
     // ......
 
+    testSpringBoot2Standalone();
+    testSpringBoot2Servlet();
+
     deploys.getEdge().stop();
   }
 
   private static void testStandalone() throws Throwable {
     deploys.getBaseProducer().ensureReady();
 
+    ITJUnitUtils.setProducerName("it-producer");
+
     ITJUnitUtils.addParent("standalone");
 
     ITJUnitUtils.runWithHighwayAndRest(TestChangeTransport.class);
@@ -126,4 +131,61 @@ private static void testStandalone() throws Throwable {
     ITJUnitUtils.getParents().pop();
     deploys.getBaseProducer().stop();
   }
+
+  private static void testSpringBoot2Standalone() throws Throwable {
+    deploys.getSpringBoot2StandaloneProducer().ensureReady();
+
+    ITJUnitUtils.setProducerName("it-producer-deploy-springboot2-standalone");
+
+    ITJUnitUtils.addParent("springBoot2Standalone");
+
+    ITJUnitUtils.runWithHighwayAndRest(TestChangeTransport.class);
+    ITJUnitUtils.runWithHighwayAndRest(TestDataTypePrimitive.class);
+    ITJUnitUtils.runWithHighwayAndRest(TestAnnotatedAttribute.class);
+
+    ITJUnitUtils.runWithRest(TestDefaultValue.class);
+
+    ITJUnitUtils.runWithHighwayAndRest(TestTrace.class);
+    ITJUnitUtils.run(TestTraceEdge.class);
+
+    ITJUnitUtils.runWithHighwayAndRest(TestParamCodec.class);
+    ITJUnitUtils.run(TestParamCodecEdge.class);
+
+    //ITJUnitUtils.run(TestDefaultJsonValueJaxrsSchema.class);
+
+    ITJUnitUtils.runWithRest(TestRestServerConfig.class);
+    ITJUnitUtils.run(TestRestServerConfigEdge.class);
+
+    ITJUnitUtils.getParents().pop();
+
+    deploys.getSpringBoot2StandaloneProducer().stop();
+  }
+
+  private static void testSpringBoot2Servlet() throws Throwable {
+    deploys.getSpringBoot2ServletProducer().ensureReady();
+
+    ITJUnitUtils.setProducerName("it-producer-deploy-springboot2-servlet");
+
+    ITJUnitUtils.addParent("springBoot2Servlet");
+
+    ITJUnitUtils.runWithHighwayAndRest(TestChangeTransport.class);
+    ITJUnitUtils.runWithHighwayAndRest(TestDataTypePrimitive.class);
+
+    ITJUnitUtils.runWithRest(TestDefaultValue.class);
+
+    ITJUnitUtils.runWithHighwayAndRest(TestTrace.class);
+    ITJUnitUtils.run(TestTraceEdge.class);
+
+    ITJUnitUtils.runWithHighwayAndRest(TestParamCodec.class);
+    ITJUnitUtils.run(TestParamCodecEdge.class);
+
+    //ITJUnitUtils.run(TestDefaultJsonValueJaxrsSchema.class);
+
+    //config by embedded tomcat
+    //ITJUnitUtils.runWithRest(TestRestServerConfig.class);
+
+    ITJUnitUtils.getParents().pop();
+
+    deploys.getSpringBoot2ServletProducer().stop();
+  }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/Consumers.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/Consumers.java
index 4f3f42b6b..5ed44ab33 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/Consumers.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/Consumers.java
@@ -22,7 +22,7 @@
 import org.springframework.web.client.RestTemplate;
 
 public class Consumers<INTF> {
-  private String producerName = "it-producer";
+  private String producerName;
 
   private String schemaId;
 
@@ -38,12 +38,13 @@
 
   private String transport;
 
-  public Consumers(String schemaId, Class<INTF> intfCls) {
+  public Consumers(String producerName, String schemaId, Class<INTF> intfCls) {
+    this.producerName = producerName;
     this.schemaId = schemaId;
     this.intfCls = intfCls;
 
     scbRestTemplate = new ITSCBRestTemplate(producerName, schemaId);
-    edgeRestTemplate = GateRestTemplate.createEdgeRestTemplate(producerName, 
schemaId);
+    edgeRestTemplate = new GateRestTemplate("it-edge", producerName, schemaId);
     zuulRestTemplate = null;// 
GateRestTemplate.createZuulRestTemplate(producerName, schemaId);
   }
 
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java
index 881ae6c88..fff46f5e4 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/Deploys.java
@@ -38,6 +38,10 @@
 
   private MicroserviceDeploy baseProducer;
 
+  private MicroserviceDeploy springBoot2StandaloneProducer;
+
+  private MicroserviceDeploy springBoot2ServletProducer;
+
   private MicroserviceDeploy zuul;
 
   public ServiceCenterDeploy getServiceCenter() {
@@ -56,6 +60,14 @@ public MicroserviceDeploy getBaseProducer() {
     return baseProducer;
   }
 
+  public MicroserviceDeploy getSpringBoot2StandaloneProducer() {
+    return springBoot2StandaloneProducer;
+  }
+
+  public MicroserviceDeploy getSpringBoot2ServletProducer() {
+    return springBoot2ServletProducer;
+  }
+
   public void init() throws Throwable {
     initPomVersion();
     LOGGER.info("test version: {}", pomVersion);
@@ -63,6 +75,8 @@ public void init() throws Throwable {
     serviceCenter = new ServiceCenterDeploy();
     initEdge();
     initBaseProducer();
+    initSpringBoot2StandaloneProducer();
+    initSpringBoot2ServletProducer();
 //    initZuul();
   }
 
@@ -160,31 +174,59 @@ private boolean initDeployDefinition(DeployDefinition 
deployDefinition, File wor
   }
 
   private void initBaseProducer() {
-    MicroserviceDeployDefinition baseProducerDefinition = new 
MicroserviceDeployDefinition();
-    baseProducerDefinition.setDeployName("baseProducer");
-    baseProducerDefinition.setCmd("it-producer");
-    baseProducerDefinition.setArgs(new String[] {});
-    baseProducerDefinition.setAppId("integration-test");
-    baseProducerDefinition.setMicroserviceName("it-producer");
-    baseProducerDefinition.setVersion(DEFAULT_MICROSERVICE_VERSION);
+    MicroserviceDeployDefinition definition = new 
MicroserviceDeployDefinition();
+    definition.setDeployName("baseProducer");
+    definition.setCmd("it-producer");
+    definition.setArgs(new String[] {});
+    definition.setAppId("integration-test");
+    definition.setMicroserviceName("it-producer");
+    definition.setVersion(DEFAULT_MICROSERVICE_VERSION);
+
+    initDeployDefinition(definition);
+
+    baseProducer = new MicroserviceDeploy(definition);
+  }
+
+  private void initSpringBoot2ServletProducer() {
+    MicroserviceDeployDefinition definition = new 
MicroserviceDeployDefinition();
+    definition.setDeployName("springBoot2ServletProducer");
+    definition.setCmd("it-producer-deploy-springboot2-servlet");
+    definition.setArgs(new String[] {});
+    definition.setAppId("integration-test");
+    definition.setMicroserviceName("it-producer-deploy-springboot2-servlet");
+    definition.setVersion(DEFAULT_MICROSERVICE_VERSION);
+
+    initDeployDefinition(definition);
+
+    springBoot2ServletProducer = new MicroserviceDeploy(definition);
+  }
+
+  private void initSpringBoot2StandaloneProducer() {
+    MicroserviceDeployDefinition definition = new 
MicroserviceDeployDefinition();
+    definition.setDeployName("springBoot2StandaloneProducer");
+    definition.setCmd("it-producer-deploy-springboot2-standalone");
+    definition.setArgs(new String[] {});
+    definition.setAppId("integration-test");
+    
definition.setMicroserviceName("it-producer-deploy-springboot2-standalone");
+    definition.setVersion(DEFAULT_MICROSERVICE_VERSION);
 
-    initDeployDefinition(baseProducerDefinition);
+    initDeployDefinition(definition);
 
-    baseProducer = new MicroserviceDeploy(baseProducerDefinition);
+    springBoot2StandaloneProducer = new MicroserviceDeploy(definition);
   }
 
   private void initEdge() {
-    MicroserviceDeployDefinition edgeDefinition = new 
MicroserviceDeployDefinition();
-    edgeDefinition.setDeployName("edge");
-    edgeDefinition.setCmd("it-edge");
-    edgeDefinition.setArgs(new String[] {});
-    edgeDefinition.setAppId("integration-test");
-    edgeDefinition.setMicroserviceName("it-edge");
-    edgeDefinition.setVersion(DEFAULT_MICROSERVICE_VERSION);
+    MicroserviceDeployDefinition definition = new 
MicroserviceDeployDefinition();
+    definition.setDeployName("edge");
+    definition.setCmd("it-edge");
+    definition.setArgs(new String[] {});
+    definition.setAppId("integration-test");
+    definition.setMicroserviceName("it-edge");
+    definition.setVersion(DEFAULT_MICROSERVICE_VERSION);
 
-    initDeployDefinition(edgeDefinition);
+    initDeployDefinition(definition);
 
-    edge = new MicroserviceDeploy(edgeDefinition);
+    edge = new MicroserviceDeploy(definition);
   }
 
   //  private void initZuul() {
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/GateRestTemplate.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/GateRestTemplate.java
index a66c2f411..b2b91c68b 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/GateRestTemplate.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/GateRestTemplate.java
@@ -33,26 +33,6 @@
 
   private String urlPrefix;
 
-  public static RestTemplate createEdgeRestTemplate(String schemaId) {
-    return createEdgeRestTemplate("it-producer", schemaId);
-  }
-
-  public static RestTemplate createEdgeRestTemplate(String producerName, 
String schemaId) {
-    return new GateRestTemplate("it-edge", schemaId);
-  }
-
-  public static RestTemplate createZuulRestTemplate(String schemaId) {
-    return createZuulRestTemplate("it-producer", schemaId);
-  }
-
-  public static RestTemplate createZuulRestTemplate(String producerName, 
String schemaId) {
-    return new GateRestTemplate("it-zuul", schemaId);
-  }
-
-  public GateRestTemplate(String gateName, String schemaId) {
-    this(gateName, "it-producer", schemaId);
-  }
-
   public GateRestTemplate(String gateName, String producerName, String 
schemaId) {
     urlPrefix = getUrlPrefix(gateName, producerName, schemaId);
 
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/ITSCBRestTemplate.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/ITSCBRestTemplate.java
index bfb25287e..444ffc0bf 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/ITSCBRestTemplate.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/extend/engine/ITSCBRestTemplate.java
@@ -24,10 +24,6 @@
 import org.apache.servicecomb.serviceregistry.definition.DefinitionConst;
 
 public class ITSCBRestTemplate extends CseRestTemplate {
-  public ITSCBRestTemplate(String schemaId) {
-    this("it-producer", schemaId);
-  }
-
   public ITSCBRestTemplate(String producerName, String schemaId) {
     MicroserviceVersionRule microserviceVersionRule = 
RegistryUtils.getServiceRegistry().getAppManager()
         .getOrCreateMicroserviceVersionRule(RegistryUtils.getAppId(), 
producerName,
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
index c0ca9a082..edf253fc7 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
@@ -45,6 +45,16 @@
 
   private static String transport;
 
+  private static String producerName;
+
+  public static String getProducerName() {
+    return producerName;
+  }
+
+  public static void setProducerName(String producerName) {
+    ITJUnitUtils.producerName = producerName;
+  }
+
   static {
     jUnitCore.addListener(new RunListener() {
       @Override
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestAnnotatedAttribute.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestAnnotatedAttribute.java
index 7e393280d..37a5b1f4e 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestAnnotatedAttribute.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestAnnotatedAttribute.java
@@ -23,7 +23,7 @@
 
 import org.apache.servicecomb.it.Consumers;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -37,12 +37,17 @@
     String fromHeader(String inputs);
   }
 
-  private static Consumers<AnnotatedAttributeIntf> consumersSpringmvc =
-      new Consumers<>("annotatedAttributeSpringmvc", 
AnnotatedAttributeIntf.class);
+  private static Consumers<AnnotatedAttributeIntf> consumersSpringmvc;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumersSpringmvc = new Consumers<>(producerName, 
"annotatedAttributeSpringmvc", AnnotatedAttributeIntf.class);
+      consumersSpringmvc.init(ITJUnitUtils.getTransport());
+    }
   }
 
   @Test
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
index 0153ea6ee..a7be7bc65 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
@@ -19,7 +19,7 @@
 import org.apache.servicecomb.it.Consumers;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 public class TestChangeTransport {
@@ -27,18 +27,25 @@
     String checkTransport();
   }
 
-  static Consumers<ChangeTranportIntf> consumersPojo = new 
Consumers<>("transportPojo", ChangeTranportIntf.class);
+  private static Consumers<ChangeTranportIntf> consumersPojo;
 
-  static Consumers<ChangeTranportIntf> consumersJaxrs = new 
Consumers<>("transportJaxrs", ChangeTranportIntf.class);
+  private static Consumers<ChangeTranportIntf> consumersJaxrs;
 
-  static Consumers<ChangeTranportIntf> consumersSpringmvc = new 
Consumers<>("transportSpringmvc",
-      ChangeTranportIntf.class);
+  private static Consumers<ChangeTranportIntf> consumersSpringmvc;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumersPojo.init(ITJUnitUtils.getTransport());
-    consumersJaxrs.init(ITJUnitUtils.getTransport());
-    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumersPojo = new Consumers<>(producerName, "transportPojo", 
ChangeTranportIntf.class);
+      consumersJaxrs = new Consumers<>(producerName, "transportJaxrs", 
ChangeTranportIntf.class);
+      consumersSpringmvc = new Consumers<>(producerName, "transportSpringmvc", 
ChangeTranportIntf.class);
+      consumersPojo.init(ITJUnitUtils.getTransport());
+      consumersJaxrs.init(ITJUnitUtils.getTransport());
+      consumersSpringmvc.init(ITJUnitUtils.getTransport());
+    }
   }
 
   void checkTransport_intf(Consumers<ChangeTranportIntf> consumers) {
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
index c9a171408..473fc5486 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
@@ -23,7 +23,7 @@
 
 import org.apache.servicecomb.it.Consumers;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -72,19 +72,25 @@
     String stringConcat(String str1, String str2);
   }
 
-  private static Consumers<DataTypePojoIntf> consumersPojo = new 
Consumers<>("dataTypePojo", DataTypePojoIntf.class);
+  private static Consumers<DataTypePojoIntf> consumersPojo;
 
-  private static Consumers<DataTypeRestIntf> consumersJaxrs =
-      new Consumers<>("dataTypeJaxrs", DataTypeRestIntf.class);
+  private static Consumers<DataTypeRestIntf> consumersJaxrs;
 
-  private static Consumers<DataTypeRestIntf> consumersSpringmvc = new 
Consumers<>("dataTypeSpringmvc",
-      DataTypeRestIntf.class);
+  private static Consumers<DataTypeRestIntf> consumersSpringmvc;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumersPojo.init(ITJUnitUtils.getTransport());
-    consumersJaxrs.init(ITJUnitUtils.getTransport());
-    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumersPojo = new Consumers<>(producerName, "dataTypePojo", 
DataTypePojoIntf.class);
+      consumersJaxrs = new Consumers<>(producerName, "dataTypeJaxrs", 
DataTypeRestIntf.class);
+      consumersSpringmvc = new Consumers<>(producerName, "dataTypeSpringmvc", 
DataTypeRestIntf.class);
+      consumersPojo.init(ITJUnitUtils.getTransport());
+      consumersJaxrs.init(ITJUnitUtils.getTransport());
+      consumersSpringmvc.init(ITJUnitUtils.getTransport());
+    }
   }
 
   @Test
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
index 07545320e..629d9a304 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
@@ -22,8 +22,9 @@
 import java.util.Map;
 
 import org.apache.servicecomb.it.extend.engine.GateRestTemplate;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -31,12 +32,19 @@
 import org.springframework.web.client.RestTemplate;
 
 public class TestDefaultJsonValueJaxrsSchema {
-  static RestTemplate client = 
GateRestTemplate.createEdgeRestTemplate("defaultJsonValueJaxrs");
+  private static RestTemplate client;
 
-  @BeforeClass
-  public static void classSetup() {
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      client = new GateRestTemplate("it-edge", producerName, 
"defaultJsonValueJaxrs");
+    }
   }
 
+
   @Test
   public void invokeFromEdgeWithQuery() {
     String result = client.getForObject("/queryInput?size=3", String.class);
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
index c356ad2d3..b84acfdc6 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
@@ -20,7 +20,7 @@
 
 import org.apache.servicecomb.it.Consumers;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 public class TestDefaultValue {
@@ -56,16 +56,21 @@
 
   private int defaultInt = 13;
 
-  private static Consumers<DefaultValueIntf> consumersJaxrs = new 
Consumers<>("defaultValueJaxrs",
-      DefaultValueIntf.class);
+  private static Consumers<DefaultValueIntf> consumersJaxrs;
 
-  private static Consumers<DefaultValueRequireIntf> consumersSpringmvc = new 
Consumers<>("defaultValueSpringmvc",
-      DefaultValueRequireIntf.class);
+  private static Consumers<DefaultValueRequireIntf> consumersSpringmvc;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumersJaxrs.init(ITJUnitUtils.getTransport());
-    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumersJaxrs = new Consumers<>(producerName, "defaultValueJaxrs", 
DefaultValueIntf.class);
+      consumersSpringmvc = new Consumers<>(producerName, 
"defaultValueSpringmvc", DefaultValueRequireIntf.class);
+      consumersJaxrs.init(ITJUnitUtils.getTransport());
+      consumersSpringmvc.init(ITJUnitUtils.getTransport());
+    }
   }
 
   @Test
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
index 5ec8c09e1..d4a376eed 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
@@ -21,7 +21,7 @@
 
 import org.apache.servicecomb.it.Consumers;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 public class TestParamCodec {
@@ -29,11 +29,17 @@
     String spaceCharCodec(String pathVal, String q);
   }
 
-  static Consumers<ParamCodecSchemaIntf> consumers = new 
Consumers<>("paramCodec", ParamCodecSchemaIntf.class);
+  private static Consumers<ParamCodecSchemaIntf> consumers;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumers.init(ITJUnitUtils.getTransport());
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumers = new Consumers<>(producerName, "paramCodec", 
ParamCodecSchemaIntf.class);
+      consumers.init(ITJUnitUtils.getTransport());
+    }
   }
 
   @Test
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
index 9a5f6ac07..250b84e97 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
@@ -20,16 +20,28 @@
 import static org.junit.Assert.assertEquals;
 
 import org.apache.servicecomb.it.extend.engine.GateRestTemplate;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.web.client.RestTemplate;
 
 public class TestParamCodecEdge {
-  static RestTemplate rt = 
GateRestTemplate.createEdgeRestTemplate("paramCodec");
+  private static RestTemplate client;
+
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      client = new GateRestTemplate("it-edge", producerName, "paramCodec");
+    }
+  }
 
   @Test
   public void spaceCharEncode() {
     String paramString = "a%2B+%20b%% %20c";
-    String result = rt.getForObject("/spaceCharCodec/" + paramString + "?q=" + 
paramString, String.class);
+    String result = client.getForObject("/spaceCharCodec/" + paramString + 
"?q=" + paramString, String.class);
     assertEquals(paramString + " +%20%% " + paramString + " true", result);
   }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfig.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfig.java
index 2f7ccc00e..cdced0f39 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfig.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfig.java
@@ -21,7 +21,7 @@
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.base.Strings;
@@ -36,12 +36,17 @@
     String testMaxInitialLineLength(String q);
   }
 
-  static Consumers<RestServerConfigSchemaIntf> consumers = new 
Consumers<>("restServerConfig",
-      RestServerConfigSchemaIntf.class);
+  private static String producerName;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumers.init(ITJUnitUtils.getTransport());
+  private static Consumers<RestServerConfigSchemaIntf> consumers;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumers = new Consumers<>(producerName, "restServerConfig", 
RestServerConfigSchemaIntf.class);
+      consumers.init(ITJUnitUtils.getTransport());
+    }
   }
 
   /**
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfigEdge.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfigEdge.java
index dbdf50871..d18f9fcf7 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfigEdge.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestRestServerConfigEdge.java
@@ -26,19 +26,30 @@
 import java.util.Scanner;
 
 import org.apache.servicecomb.it.extend.engine.GateRestTemplate;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestClientException;
 
 public class TestRestServerConfigEdge {
-  static GateRestTemplate rt = (GateRestTemplate) 
GateRestTemplate.createEdgeRestTemplate("dataTypeJaxrs");
+  private static GateRestTemplate client;
+
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      client = new GateRestTemplate("it-edge", producerName, "dataTypeJaxrs");
+    }
+  }
 
   @Test
   public void testIllegalPathParam() throws IOException {
     String paramString = "%%A";
-    String requestUri =
-        rt.getUrlPrefix() + "/intPath/" + paramString;
+    String requestUri = client.getUrlPrefix() + "/intPath/" + paramString;
 
     URL url = new URL(requestUri);
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
@@ -60,10 +71,10 @@ public void testIllegalPathParam() throws IOException {
 
   @Test
   public void test404ThrownByServicCombNotConvertedTo500() {
-    String notFoundRequestUri = rt.getUrlPrefix() + "/intPath2/123";
+    String notFoundRequestUri = client.getUrlPrefix() + "/intPath2/123";
 
     try {
-      rt.getForEntity(notFoundRequestUri, int.class);
+      client.getForEntity(notFoundRequestUri, int.class);
       fail("an exception is expected!");
     } catch (RestClientException e) {
       Assert.assertEquals(404, ((HttpClientErrorException) 
e).getRawStatusCode());
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTrace.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTrace.java
index 37aa9cc3a..4e908f055 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTrace.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTrace.java
@@ -24,9 +24,9 @@
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.apache.servicecomb.swagger.invocation.context.ContextUtils;
 import org.apache.servicecomb.swagger.invocation.context.InvocationContext;
-import org.junit.AfterClass;
+import org.junit.After;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 public class TestTrace {
@@ -34,19 +34,26 @@
     CompletableFuture<String> echoProxy();
   }
 
-  static Consumers<TraceSchemaIntf> consumers = new Consumers<>("trace", 
TraceSchemaIntf.class);
+  private static Consumers<TraceSchemaIntf> consumers;
 
-  @BeforeClass
-  public static void classSetup() {
-    consumers.init(ITJUnitUtils.getTransport());
+
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      consumers = new Consumers<>(producerName, "trace", 
TraceSchemaIntf.class);
+      consumers.init(ITJUnitUtils.getTransport());
+    }
 
     InvocationContext context = new InvocationContext();
     context.addContext(Const.TRACE_ID_NAME, "testId");
     ContextUtils.setInvocationContext(context);
   }
 
-  @AfterClass
-  public static void classTeardown() {
+  @After
+  public void teardown() {
     ContextUtils.removeInvocationContext();
   }
 
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTraceEdge.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTraceEdge.java
index 914464aa9..3244fb5c8 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTraceEdge.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestTraceEdge.java
@@ -18,7 +18,9 @@
 
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.it.extend.engine.GateRestTemplate;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -26,7 +28,17 @@
 import org.springframework.web.client.RestTemplate;
 
 public class TestTraceEdge {
-  static RestTemplate rt = GateRestTemplate.createEdgeRestTemplate("trace");
+  private static RestTemplate client;
+
+  private static String producerName;
+
+  @Before
+  public void prepare() {
+    if (!ITJUnitUtils.getProducerName().equals(producerName)) {
+      producerName = ITJUnitUtils.getProducerName();
+      client = new GateRestTemplate("it-edge", producerName, "trace");
+    }
+  }
 
   @Test
   public void echo() {
@@ -35,7 +47,7 @@ public void echo() {
 
     HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
 
-    String traceId = rt.exchange("/echo-proxy", HttpMethod.GET, requestEntity, 
String.class).getBody();
+    String traceId = client.exchange("/echo-proxy", HttpMethod.GET, 
requestEntity, String.class).getBody();
     Assert.assertEquals("testId", traceId);
   }
 }
diff --git a/integration-tests/it-consumer/src/main/resources/logback.xml 
b/integration-tests/it-consumer/src/main/resources/logback.xml
new file mode 100644
index 000000000..3973b23a2
--- /dev/null
+++ b/integration-tests/it-consumer/src/main/resources/logback.xml
@@ -0,0 +1,30 @@
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - 
%msg%n</pattern>
+    </encoder>
+  </appender>
+
+  <root level="WARN">
+    <appender-ref ref="STDOUT" />
+  </root>
+
+</configuration>
\ No newline at end of file
diff --git 
a/integration-tests/it-producer-deploy-springboot2-servlet/enable-it-jar 
b/integration-tests/it-producer-deploy-springboot2-servlet/enable-it-jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/integration-tests/it-producer-deploy-springboot2-servlet/pom.xml 
b/integration-tests/it-producer-deploy-springboot2-servlet/pom.xml
new file mode 100644
index 000000000..1cdac736e
--- /dev/null
+++ b/integration-tests/it-producer-deploy-springboot2-servlet/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.servicecomb.tests</groupId>
+  <artifactId>it-producer-deploy-springboot2-servlet</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>java-chassis-dependencies-springboot2</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb.tests</groupId>
+      <artifactId>it-producer</artifactId>
+      <version>1.1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>spring-boot2-starter-servlet</artifactId>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <it.main>org.apache.servicecomb.it.SpringBoot2ServletApplication</it.main>
+  </properties>
+
+  <profiles>
+    <profile>
+      <id>it-jar</id>
+      <activation>
+        <file>
+          <exists>enable-it-jar</exists>
+        </file>
+      </activation>
+
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-maven-plugin</artifactId>
+            <version>2.0.0.RELEASE</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>repackage</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jar-plugin</artifactId>
+            <version>2.6</version>
+            <configuration>
+              <archive>
+                <manifestEntries>
+                  <Class-Path>.</Class-Path>
+                </manifestEntries>
+              </archive>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
\ No newline at end of file
diff --git 
a/integration-tests/it-producer-deploy-springboot2-servlet/src/main/java/org/apache/servicecomb/it/SpringBoot2ServletApplication.java
 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/java/org/apache/servicecomb/it/SpringBoot2ServletApplication.java
new file mode 100644
index 000000000..87236e3b1
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/java/org/apache/servicecomb/it/SpringBoot2ServletApplication.java
@@ -0,0 +1,32 @@
+/*
+ * 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.it;
+
+import org.apache.servicecomb.springboot2.starter.EnableServiceComb;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableServiceComb
+public class SpringBoot2ServletApplication {
+  public static void main(String[] args) {
+    new CommandReceiver();
+
+    SpringApplication.run(SpringBoot2ServletApplication.class, args);
+  }
+}
diff --git 
a/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/application.yaml
 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/application.yaml
new file mode 100644
index 000000000..e622a6975
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/application.yaml
@@ -0,0 +1,23 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+server:
+  port: 8080
+
+spring:
+  main:
+    web-application-type: servlet
diff --git 
a/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/microservice.yaml
 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/microservice.yaml
new file mode 100644
index 000000000..9134e8619
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-servlet/src/main/resources/microservice.yaml
@@ -0,0 +1,24 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+servicecomb-config-order: 2
+
+service_description:
+  name: it-producer-deploy-springboot2-servlet
+
+servicecomb:
+  rest:
+    address: 0.0.0.0:8080
\ No newline at end of file
diff --git 
a/integration-tests/it-producer-deploy-springboot2-standalone/enable-it-jar 
b/integration-tests/it-producer-deploy-springboot2-standalone/enable-it-jar
new file mode 100644
index 000000000..e69de29bb
diff --git 
a/integration-tests/it-producer-deploy-springboot2-standalone/pom.xml 
b/integration-tests/it-producer-deploy-springboot2-standalone/pom.xml
new file mode 100644
index 000000000..ae9b4179f
--- /dev/null
+++ b/integration-tests/it-producer-deploy-springboot2-standalone/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <version>1.1.0-SNAPSHOT</version>
+  <groupId>org.apache.servicecomb.tests</groupId>
+  <artifactId>it-producer-deploy-springboot2-standalone</artifactId>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>java-chassis-dependencies-springboot2</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb.tests</groupId>
+      <artifactId>it-producer</artifactId>
+      <version>1.1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>spring-boot2-starter-standalone</artifactId>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    
<it.main>org.apache.servicecomb.it.SpringBoot2StandaloneApplication</it.main>
+  </properties>
+
+  <profiles>
+    <profile>
+      <id>it-jar</id>
+      <activation>
+        <file>
+          <exists>enable-it-jar</exists>
+        </file>
+      </activation>
+
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-maven-plugin</artifactId>
+            <version>2.0.0.RELEASE</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>repackage</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jar-plugin</artifactId>
+            <version>2.6</version>
+            <configuration>
+              <archive>
+                <manifestEntries>
+                  <Class-Path>.</Class-Path>
+                </manifestEntries>
+              </archive>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
\ No newline at end of file
diff --git 
a/integration-tests/it-producer-deploy-springboot2-standalone/src/main/java/org/apache/servicecomb/it/SpringBoot2StandaloneApplication.java
 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/java/org/apache/servicecomb/it/SpringBoot2StandaloneApplication.java
new file mode 100644
index 000000000..75ce296fd
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/java/org/apache/servicecomb/it/SpringBoot2StandaloneApplication.java
@@ -0,0 +1,32 @@
+/*
+ * 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.it;
+
+import org.apache.servicecomb.springboot2.starter.EnableServiceComb;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableServiceComb
+public class SpringBoot2StandaloneApplication {
+  public static void main(String[] args) {
+    new CommandReceiver();
+
+    SpringApplication.run(SpringBoot2StandaloneApplication.class, args);
+  }
+}
diff --git 
a/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/application.yaml
 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/application.yaml
new file mode 100644
index 000000000..65bcf8a42
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/application.yaml
@@ -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.
+## ---------------------------------------------------------------------------
+spring:
+  main:
+    web-application-type: none
diff --git 
a/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/microservice.yaml
 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/microservice.yaml
new file mode 100644
index 000000000..f773dd9cf
--- /dev/null
+++ 
b/integration-tests/it-producer-deploy-springboot2-standalone/src/main/resources/microservice.yaml
@@ -0,0 +1,25 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+servicecomb-config-order: 1
+
+service_description:
+  name: it-producer-deploy-springboot2-standalone
+
+servicecomb:
+  rest:
+    server:
+      maxInitialLineLength: 5000
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
index 9b5ba8af3..6ded8879a 100644
--- 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TraceSchema.java
@@ -22,6 +22,7 @@
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.provider.pojo.Invoker;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.swagger.invocation.context.InvocationContext;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -33,7 +34,7 @@
     CompletableFuture<String> echo();
   }
 
-  TraceSchemaIntf intf = Invoker.createProxy("it-producer", "trace", 
TraceSchemaIntf.class);
+  TraceSchemaIntf intf;
 
   @GetMapping(path = "echo")
   public String echo(InvocationContext context) {
@@ -42,6 +43,13 @@ public String echo(InvocationContext context) {
 
   @GetMapping(path = "echo-proxy")
   public String echoProxy() throws ExecutionException, InterruptedException {
+    initTraceSchemaIntf();
     return intf.echo().get();
   }
+
+  private void initTraceSchemaIntf() {
+    if (intf == null) {
+      intf = 
Invoker.createProxy(RegistryUtils.getMicroservice().getServiceName(), "trace", 
TraceSchemaIntf.class);
+    }
+  }
 }
diff --git a/integration-tests/jaxrs-tests/src/test/resources/log4j.properties 
b/integration-tests/jaxrs-tests/src/test/resources/log4j.properties
new file mode 100644
index 000000000..705b2f7c5
--- /dev/null
+++ b/integration-tests/jaxrs-tests/src/test/resources/log4j.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+log4j.rootLogger=WARN, stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} 
- %m%n
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index b2f69b82a..17bc96cb4 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -48,6 +48,9 @@
     <module>it-edge</module>
     <module>it-common-service</module>
 
+    <module>it-producer-deploy-springboot2-standalone</module>
+    <module>it-producer-deploy-springboot2-servlet</module>
+
     <!--must be the last one-->
     <module>it-consumer</module>
   </modules>
diff --git 
a/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/resources/config/log4j.z.properties
 
b/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/resources/config/log4j.z.properties
new file mode 100644
index 000000000..02401e6e7
--- /dev/null
+++ 
b/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/resources/config/log4j.z.properties
@@ -0,0 +1,21 @@
+#
+# 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.
+#
+log4j.logger.runLogger=WARN
+log4j.rootLogger=WARN,paas,stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} 
- %m%n
diff --git 
a/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
 
b/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
new file mode 100644
index 000000000..02401e6e7
--- /dev/null
+++ 
b/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
@@ -0,0 +1,21 @@
+#
+# 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.
+#
+log4j.logger.runLogger=WARN
+log4j.rootLogger=WARN,paas,stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} 
- %m%n
diff --git a/java-chassis-dependencies-springboot2/pom.xml 
b/java-chassis-dependencies-springboot2/pom.xml
new file mode 100644
index 000000000..2033c0704
--- /dev/null
+++ b/java-chassis-dependencies-springboot2/pom.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>java-chassis</artifactId>
+    <groupId>org.apache.servicecomb</groupId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>java-chassis-dependencies-springboot2</artifactId>
+
+  <name>Java Chassis::Dependencies::SpringBoot2</name>
+  <packaging>pom</packaging>
+
+  <properties>
+    <spring.version>5.0.4.RELEASE</spring.version>
+    <spring.boot.version>2.0.0.RELEASE</spring.boot.version>
+    <spring.data.version>2.0.5.RELEASE</spring.data.version>
+    <spring.session.version>2.0.3.RELEASE</spring.session.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter</artifactId>
+        <version>${spring.boot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-web</artifactId>
+        <version>${spring.boot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-web</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-webmvc</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-aop</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-aspects</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-beans</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-core</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-expression</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-jdbc</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-orm</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-oxm</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-tx</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.springframework.data</groupId>
+        <artifactId>spring-data-jpa</artifactId>
+        <version>${spring.data.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework.data</groupId>
+        <artifactId>spring-data-commons</artifactId>
+        <version>${spring.data.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework.data</groupId>
+        <artifactId>spring-data-keyvalue</artifactId>
+        <version>${spring.data.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework.data</groupId>
+        <artifactId>spring-data-redis</artifactId>
+        <version>${spring.data.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.springframework.session</groupId>
+        <artifactId>spring-session-data-redis</artifactId>
+        <version>${spring.session.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>java-chassis-dependencies</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>spring-boot2-starter</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>spring-boot2-starter-servlet</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>spring-boot2-starter-standalone</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index adc0bbf93..d161bd4e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,6 +107,8 @@
     <module>metrics</module>
     <module>dynamic-config</module>
     <module>archetypes</module>
+    <module>java-chassis-dependencies-springboot2</module>
+    <module>spring-boot2-starter-parent</module>
   </modules>
 
   <build>
diff --git a/spring-boot2-starter-parent/pom.xml 
b/spring-boot2-starter-parent/pom.xml
new file mode 100644
index 000000000..036ad3e84
--- /dev/null
+++ b/spring-boot2-starter-parent/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <groupId>org.apache.servicecomb</groupId>
+    <artifactId>java-chassis-dependencies-springboot2</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+    <relativePath>../java-chassis-dependencies-springboot2</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>spring-boot2-starter-parent</artifactId>
+  <packaging>pom</packaging>
+  <version>1.1.0-SNAPSHOT</version>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <java.version>1.8</java.version>
+    <argLine>-Dfile.encoding=UTF-8</argLine>
+  </properties>
+
+  <modules>
+    <module>spring-boot2-starter</module>
+    <module>spring-boot2-starter-servlet</module>
+    <module>spring-boot2-starter-standalone</module>
+  </modules>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
\ No newline at end of file
diff --git a/spring-boot2-starter-parent/spring-boot2-starter-servlet/pom.xml 
b/spring-boot2-starter-parent/spring-boot2-starter-servlet/pom.xml
new file mode 100644
index 000000000..9873dc07a
--- /dev/null
+++ b/spring-boot2-starter-parent/spring-boot2-starter-servlet/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>spring-boot2-starter-parent</artifactId>
+    <groupId>org.apache.servicecomb</groupId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>spring-boot2-starter-servlet</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>spring-boot2-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-rest-servlet</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-test-scaffolding</artifactId>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git 
a/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/RestServletInitializer.java
 
b/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/RestServletInitializer.java
new file mode 100644
index 000000000..0852816fd
--- /dev/null
+++ 
b/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/RestServletInitializer.java
@@ -0,0 +1,73 @@
+/*
+ * 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.springboot2.starter.servlet;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.servicecomb.transport.rest.servlet.ServletConfig;
+import org.apache.servicecomb.transport.rest.servlet.ServletUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import 
org.springframework.boot.web.server.AbstractConfigurableWebServerFactory;
+import org.springframework.boot.web.server.WebServerFactoryCustomizer;
+import org.springframework.boot.web.servlet.ServletContextInitializer;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import com.netflix.config.DynamicPropertyFactory;
+
+@Component
+public class RestServletInitializer
+    implements 
WebServerFactoryCustomizer<AbstractConfigurableWebServerFactory>, 
ServletContextInitializer {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(RestServletInitializer.class);
+
+  private AbstractConfigurableWebServerFactory factory;
+
+  @Override
+  public void customize(AbstractConfigurableWebServerFactory factory) {
+    this.factory = factory;
+  }
+
+  @Override
+  public void onStartup(ServletContext servletContext) throws ServletException 
{
+    if (factory.getPort() == 0) {
+      LOGGER.warn(
+          "spring boot embed web container listen port is 0, serviceComb will 
not use container's port to handler RESTful request.");
+      return;
+    }
+
+    // web container did not did listen now.
+    // so mock to listen, and then close.
+    try (ServerSocket ss = new ServerSocket(factory.getPort(), 0, 
factory.getAddress())) {
+      if (StringUtils.isEmpty(ServletConfig.getServletUrlPattern())) {
+        // ensure the servlet will be instantiated
+        Configuration configuration = (Configuration) 
DynamicPropertyFactory.getBackingConfigurationSource();
+        configuration.setProperty(ServletConfig.KEY_SERVLET_URL_PATTERN, 
ServletConfig.DEFAULT_URL_PATTERN);
+      }
+
+      ServletUtils.init(servletContext);
+    } catch (IOException e) {
+      throw new ServletException(e);
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/package-info.java
 
b/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/package-info.java
new file mode 100644
index 000000000..041302864
--- /dev/null
+++ 
b/spring-boot2-starter-parent/spring-boot2-starter-servlet/src/main/java/org/apache/servicecomb/springboot2/starter/servlet/package-info.java
@@ -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.
+ */
+
+package org.apache.servicecomb.springboot2.starter.servlet;
\ No newline at end of file
diff --git 
a/spring-boot2-starter-parent/spring-boot2-starter-standalone/pom.xml 
b/spring-boot2-starter-parent/spring-boot2-starter-standalone/pom.xml
new file mode 100644
index 000000000..55d67f435
--- /dev/null
+++ b/spring-boot2-starter-parent/spring-boot2-starter-standalone/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>spring-boot2-starter-parent</artifactId>
+    <groupId>org.apache.servicecomb</groupId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>spring-boot2-starter-standalone</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>spring-boot2-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-rest-vertx</artifactId>
+    </dependency>
+
+    <!--ConditionEvaluationReportLoggingListener need in autoconfigure-->
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-validator</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>foundation-test-scaffolding</artifactId>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/spring-boot2-starter-parent/spring-boot2-starter/pom.xml 
b/spring-boot2-starter-parent/spring-boot2-starter/pom.xml
new file mode 100644
index 000000000..86e528859
--- /dev/null
+++ b/spring-boot2-starter-parent/spring-boot2-starter/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>spring-boot2-starter-parent</artifactId>
+    <groupId>org.apache.servicecomb</groupId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>spring-boot2-starter</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>log4j-over-slf4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>provider-springmvc</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>provider-jaxrs</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>provider-pojo</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>handler-bizkeeper</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>handler-loadbalance</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>handler-flowcontrol-qps</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git 
a/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/EnableServiceComb.java
 
b/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/EnableServiceComb.java
new file mode 100644
index 000000000..dd09d68c3
--- /dev/null
+++ 
b/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/EnableServiceComb.java
@@ -0,0 +1,34 @@
+/*
+ * 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.springboot2.starter;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.springframework.context.annotation.Import;
+
+/**
+ * This annotation enables auto-configuration of Spring beans to integrate 
with ServiceComb modules.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Import(ServiceCombSpringConfiguration.class)
+public @interface EnableServiceComb {
+
+}
diff --git 
a/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/ServiceCombSpringConfiguration.java
 
b/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/ServiceCombSpringConfiguration.java
new file mode 100644
index 000000000..6b39f7cfe
--- /dev/null
+++ 
b/spring-boot2-starter-parent/spring-boot2-starter/src/main/java/org/apache/servicecomb/springboot2/starter/ServiceCombSpringConfiguration.java
@@ -0,0 +1,34 @@
+/*
+ * 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.springboot2.starter;
+
+import javax.inject.Inject;
+
+import org.apache.servicecomb.core.CseApplicationListener;
+import org.apache.servicecomb.foundation.common.utils.BeanUtils;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportResource;
+
+@Configuration
+@ImportResource(BeanUtils.DEFAULT_BEAN_RESOURCE)
+class ServiceCombSpringConfiguration {
+  @Inject
+  public void setCseApplicationListener(CseApplicationListener 
cseApplicationListener) {
+    cseApplicationListener.setInitEventClass(ApplicationReadyEvent.class);
+  }
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Java Chassis support spring boot 2.0
> ------------------------------------
>
>                 Key: SCB-910
>                 URL: https://issues.apache.org/jira/browse/SCB-910
>             Project: Apache ServiceComb
>          Issue Type: Bug
>          Components: Java-Chassis
>    Affects Versions: java-chassis-1.0.0
>            Reporter: yangyongzheng
>            Assignee: yangyongzheng
>            Priority: Major
>             Fix For: java-chassis-1.1.0
>
>
> Java Chassis support both spring boot 1.5.x and spring boot 2.0.x



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to