This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 97c4c7a99497cb0f655a0c1f57bd1539a8a27f01 Author: liubao <[email protected]> AuthorDate: Thu Sep 21 17:05:24 2023 +0800 [SCB-2008]change DynamicPropertyFactory to Environment: in edge --- .../servicecomb/core/executor/ExecutorManager.java | 12 ++-- .../edge/core/CommonHttpEdgeDispatcher.java | 16 ++++- .../edge/core/DefaultEdgeDispatcher.java | 19 ++++-- .../servicecomb/edge/core/EdgeBootListener.java | 26 +++----- .../edge/core/URLMappedEdgeDispatcher.java | 16 ++++- .../edge/core/TestEdgeBootListener.java | 77 ---------------------- .../edge/core/TestURLMappedEdgeDispatcher.java | 11 +++- .../transport/rest/vertx/VertxHttpDispatcher.java | 1 + 8 files changed, 68 insertions(+), 110 deletions(-) diff --git a/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java b/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java index dd4eab35a..557ad73e1 100644 --- a/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java +++ b/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java @@ -31,14 +31,18 @@ public class ExecutorManager { public static final String KEY_EXECUTORS_DEFAULT = "servicecomb.executors.default"; - public static final String EXECUTOR_GROUP_THREADPOOL = "servicecomb.executor.groupThreadPool"; + public static final String EXECUTOR_GROUP_THREAD_POOL = "servicecomb.executor.groupThreadPool"; public static final String EXECUTOR_REACTIVE = "servicecomb.executor.reactive"; - public static final String EXECUTOR_DEFAULT = EXECUTOR_GROUP_THREADPOOL; - private final Map<String, Executor> executors = new ConcurrentHashMapEx<>(); + static String EXECUTOR_DEFAULT = EXECUTOR_GROUP_THREAD_POOL; + + public static void setExecutorDefault(String executorDefault) { + EXECUTOR_DEFAULT = executorDefault; + } + private Environment environment; public ExecutorManager() { @@ -108,7 +112,7 @@ public class ExecutorManager { } protected Executor findByKey(String configKey) { - String id = environment.getProperty(configKey, String.class); + String id = environment.getProperty(configKey); if (id == null) { return null; } diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java index 2f2d0c021..f131caf28 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java @@ -38,6 +38,8 @@ import org.apache.servicecomb.transport.rest.client.Http2TransportHttpClientOpti import org.apache.servicecomb.transport.rest.client.HttpTransportHttpClientOptionsSPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import com.netflix.config.ConcurrentCompositeConfiguration; import com.netflix.config.DynamicPropertyFactory; @@ -74,12 +76,20 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { private Map<String, URLMappedConfigurationItem> configurations = new HashMap<>(); + private Environment environment; + public CommonHttpEdgeDispatcher() { if (this.enabled()) { loadConfigurations(); } } + // though this is an SPI, but add as beans. + @Autowired + public void setEnvironment(Environment environment) { + this.environment = environment; + } + // Maybe future change to beans protected DiscoveryTree getDiscoveryTree() { return BeanUtils.getBean(DiscoveryTree.class); @@ -97,17 +107,17 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { @Override public int getOrder() { - return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 40_000).get(); + return environment.getProperty(KEY_ORDER, int.class, 40_000); } @Override public boolean enabled() { - return DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, false).get(); + return environment.getProperty(KEY_ENABLED, boolean.class, false); } @Override public void init(Router router) { - String pattern = DynamicPropertyFactory.getInstance().getStringProperty(KEY_PATTERN, PATTERN_ANY).get(); + String pattern = environment.getProperty(KEY_PATTERN, PATTERN_ANY); router.routeWithRegex(pattern).failureHandler(this::onFailure).handler(this::onRequest); } diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java index b82bd8e6b..9b1333ce9 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java @@ -23,9 +23,10 @@ import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx; import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx; import org.apache.servicecomb.foundation.vertx.http.VertxServerRequestToHttpServletRequest; import org.apache.servicecomb.foundation.vertx.http.VertxServerResponseToHttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import com.google.common.annotations.VisibleForTesting; -import com.netflix.config.DynamicPropertyFactory; import io.vertx.codegen.annotations.Nullable; import io.vertx.ext.web.Router; @@ -48,20 +49,28 @@ public class DefaultEdgeDispatcher extends AbstractEdgeDispatcher { private int prefixSegmentCount; + private Environment environment; + + // though this is an SPI, but add as beans. + @Autowired + public void setEnvironment(Environment environment) { + this.environment = environment; + } + @Override public int getOrder() { - return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 20_000).get(); + return environment.getProperty(KEY_ORDER, int.class, 20_000); } @Override public boolean enabled() { - return DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, false).get(); + return environment.getProperty(KEY_ENABLED, boolean.class, false); } @Override public void init(Router router) { - String prefix = DynamicPropertyFactory.getInstance().getStringProperty(KEY_PREFIX, "api").get(); - prefixSegmentCount = DynamicPropertyFactory.getInstance().getIntProperty(KEY_PREFIX_SEGMENT_COUNT, 1).get(); + String prefix = environment.getProperty(KEY_PREFIX, "api"); + prefixSegmentCount = environment.getProperty(KEY_PREFIX_SEGMENT_COUNT, int.class, 1); String regex = generateRouteRegex(prefix, false); // cookies handler are enabled by default start from 3.8.3 diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java index 0d832ec3f..538c83b8b 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java @@ -17,18 +17,24 @@ package org.apache.servicecomb.edge.core; -import org.apache.commons.configuration.Configuration; import org.apache.servicecomb.core.BootListener; import org.apache.servicecomb.core.executor.ExecutorManager; import org.apache.servicecomb.transport.rest.vertx.TransportConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import com.netflix.config.DynamicPropertyFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; public class EdgeBootListener implements BootListener { private static final Logger LOGGER = LoggerFactory.getLogger(EdgeBootListener.class); + private Environment environment; + + @Autowired + public void setEnvironment(Environment environment) { + this.environment = environment; + } + @Override public void onBootEvent(BootEvent event) { if (!EventType.BEFORE_PRODUCER_PROVIDER.equals(event.getEventType())) { @@ -36,18 +42,6 @@ public class EdgeBootListener implements BootListener { } TransportConfig.setRestServerVerticle(EdgeRestServerVerticle.class); - - String defaultExecutor = DynamicPropertyFactory.getInstance() - .getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, null) - .get(); - if (defaultExecutor != null) { - LOGGER.info("Edge service default executor is {}.", defaultExecutor); - return; - } - - // change default to reactive mode - Configuration configuration = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource(); - configuration.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, ExecutorManager.EXECUTOR_REACTIVE); - LOGGER.info("Set ReactiveExecutor to be edge service default executor."); + ExecutorManager.setExecutorDefault(ExecutorManager.EXECUTOR_REACTIVE); } } diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java index 9cd8ac67e..868e12e09 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java @@ -29,6 +29,8 @@ import org.apache.servicecomb.foundation.vertx.http.VertxServerResponseToHttpSer import org.apache.servicecomb.transport.rest.vertx.RestBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import com.google.common.annotations.VisibleForTesting; import com.netflix.config.ConcurrentCompositeConfiguration; @@ -58,7 +60,15 @@ public class URLMappedEdgeDispatcher extends AbstractEdgeDispatcher { private Map<String, URLMappedConfigurationItem> configurations = new HashMap<>(); + private Environment environment; + public URLMappedEdgeDispatcher() { + } + + // though this is an SPI, but add as beans. + @Autowired + public void setEnvironment(Environment environment) { + this.environment = environment; if (this.enabled()) { loadConfigurations(); } @@ -71,18 +81,18 @@ public class URLMappedEdgeDispatcher extends AbstractEdgeDispatcher { @Override public int getOrder() { - return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 30_000).get(); + return environment.getProperty(KEY_ORDER, int.class, 30_000); } @Override public boolean enabled() { - return DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, false).get(); + return environment.getProperty(KEY_ENABLED, boolean.class, false); } @Override public void init(Router router) { // cookies handler are enabled by default start from 3.8.3 - String pattern = DynamicPropertyFactory.getInstance().getStringProperty(KEY_PATTERN, PATTERN_ANY).get(); + String pattern = environment.getProperty(KEY_PATTERN, PATTERN_ANY); router.routeWithRegex(pattern).failureHandler(this::onFailure) .handler((PlatformHandler) URLMappedEdgeDispatcher.this::preCheck) .handler(createBodyHandler()) diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java deleted file mode 100644 index b9341c600..000000000 --- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java +++ /dev/null @@ -1,77 +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.edge.core; - -import org.apache.servicecomb.core.BootListener.BootEvent; -import org.apache.servicecomb.core.BootListener.EventType; -import org.apache.servicecomb.core.executor.ExecutorManager; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; - -import com.netflix.config.DynamicPropertyFactory; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class TestEdgeBootListener { - EdgeBootListener listener = new EdgeBootListener(); - - BootEvent bootEvent = new BootEvent(); - - @BeforeEach - public void setup() { - ArchaiusUtils.resetConfig(); - } - - @AfterEach - public void teardown() { - ArchaiusUtils.resetConfig(); - System.clearProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT); - } - - @Test - public void onBootEvent_ignore() { - System.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, ExecutorManager.EXECUTOR_DEFAULT); - - bootEvent.setEventType(EventType.AFTER_CONSUMER_PROVIDER); - listener.onBootEvent(bootEvent); - - Assertions.assertEquals(ExecutorManager.EXECUTOR_DEFAULT, - DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, null).get()); - } - - @Test - public void onBootEvent_accept_notChange() { - System.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, ExecutorManager.EXECUTOR_DEFAULT); - - bootEvent.setEventType(EventType.BEFORE_PRODUCER_PROVIDER); - listener.onBootEvent(bootEvent); - - Assertions.assertEquals(ExecutorManager.EXECUTOR_DEFAULT, - DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, null).get()); - } - - @Test - public void onBootEvent_change() { - bootEvent.setEventType(EventType.BEFORE_PRODUCER_PROVIDER); - listener.onBootEvent(bootEvent); - - Assertions.assertEquals(ExecutorManager.EXECUTOR_REACTIVE, - DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, null).get()); - } -} diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java index db0064c2a..805374bd9 100644 --- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java +++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java @@ -26,12 +26,18 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.core.env.Environment; + +import com.netflix.config.DynamicPropertyFactory; import io.vertx.ext.web.RoutingContext; public class TestURLMappedEdgeDispatcher { + Environment environment = Mockito.mock(Environment.class); + @BeforeEach public void setUp() throws Exception { + DynamicPropertyFactory.getInstance(); } @AfterEach @@ -41,9 +47,10 @@ public class TestURLMappedEdgeDispatcher { @Test public void testConfigurations() { - ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.enabled", true); - + Mockito.when(environment.getProperty("servicecomb.http.dispatcher.edge.url.enabled", boolean.class, false)) + .thenReturn(true); URLMappedEdgeDispatcher dispatcher = new URLMappedEdgeDispatcher(); + dispatcher.setEnvironment(environment); Map<String, URLMappedConfigurationItem> items = dispatcher.getConfigurations(); Assertions.assertEquals(items.size(), 0); diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java index cb96d8c22..373d63094 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java @@ -22,6 +22,7 @@ import org.apache.servicecomb.foundation.common.utils.SPIOrder; import io.vertx.ext.web.Router; +// TODO: use spring beans. public interface VertxHttpDispatcher extends SPIOrder, SPIEnabled { @Override default boolean enabled() {
