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

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


The following commit(s) were added to refs/heads/master by this push:
     new e040efe92 refactor(loadbalance): Refactor load balancing filter 
enabling logic (#4709)
e040efe92 is described below

commit e040efe9239fa68fe1f2e7e6820ad9617c706d5c
Author: SweetWuXiaoMei <[email protected]>
AuthorDate: Fri Feb 7 16:30:21 2025 +0800

    refactor(loadbalance): Refactor load balancing filter enabling logic (#4709)
    
    * refactor(loadbalance): 重构负载均衡过滤器启用逻辑
    
    -优化了 
InstancePropertyDiscoveryFilter、PriorityInstancePropertyDiscoveryFilter 和 
ZoneAwareDiscoveryFilter 的启用逻辑
    - 使用 DynamicProperties 替代 Environment 获取配置属性
    - 添加了对配置属性的缓存,避免重复获取
    - 调整了配置属性的默认值
    
    * test(foundation-registry): 重构测试用例中环境属性的获取
    
    - 引入 DynamicProperties 类以替代 Environment 类
    - 使用动态属性获取替代静态属性获取
    - 增加对属性默认值的处理
    
    * refactor(registry): 重构发现过滤器中的属性获取方式
    
    - 将 Environment 和 DynamicProperties 的使用方式统一为 DynamicProperties
    -优化了属性获取逻辑,使用动态属性替换静态属性
    - 移除了冗余代码,提高了代码的可读性和可维护性
    
    * refactor(loadbalance): 使用 DynamicProperties 替代 Environment
    
    - 在 ZoneAwareDiscoveryFilter 中引入 DynamicProperties以替代 Environment
    - 更新相关测试用例,使用 DynamicProperties 进行配置模拟
    - 移除 TestDiscoveryTree 中的冗余代码
    - 优化测试用例中的断言逻辑
    
    * refactor(loadbalance): 重构优先级实例属性发现过滤器
    
    - 移除了 PriorityInstancePropertyDiscoveryFilter 类中的冗余代码
    - 更新了单元测试,使用 DynamicProperties替代 Environment 获取配置属性
    - 优化了测试代码,提高了可维护性和可读性
    
    * refactor(loadbalance): 优化负载均衡过滤器配置
    
    - 将字符串键值对配置改为静态常量
    - 更新配置获取方式,使用静态常量作为键
    - 优化配置类结构,提高可读性和维护性
    
    * fix(config-etcd): 修复 EtcdConfig 默认连接字符串并统一命名风格
    
    - 将 EtcdConfig 类中的属性名称从连字符风格改为驼峰风格
    - 修改默认连接字符串从 ZooKeeper 地址改为 Etcd 默认地址
    - 在 demo-etcd 的 pom 文件中添加新的配置属性
---
 demo/demo-etcd/consumer/pom.xml                    |  4 +++
 .../consumer/src/main/resources/application.yml    |  3 ++
 demo/demo-etcd/test-client/pom.xml                 |  1 +
 .../apache/servicecomb/config/etcd/EtcdConfig.java | 14 ++++----
 .../servicecomb/config/DynamicPropertiesImpl.java  | 14 ++++----
 .../discovery/AbstractDiscoveryFilter.java         | 10 +++---
 .../discovery/InstanceStatusDiscoveryFilter.java   | 10 +++++-
 .../registry/discovery/TestDiscoveryTree.java      | 11 +++---
 .../servicecomb/loadbalance/Configuration.java     |  1 -
 .../filter/InstancePropertyDiscoveryFilter.java    | 14 ++++++--
 .../PriorityInstancePropertyDiscoveryFilter.java   | 21 +++++++----
 .../filter/ZoneAwareDiscoveryFilter.java           | 32 +++++++++++++----
 .../loadbalance/TestLoadBalanceFilter2.java        | 36 +++++++++++++------
 ...riorityInstancePropertyDiscoveryFilterTest.java |  9 +++--
 .../filter/TestZoneAwareDiscoveryFilter.java       | 41 ++++++++++++++--------
 15 files changed, 154 insertions(+), 67 deletions(-)

diff --git a/demo/demo-etcd/consumer/pom.xml b/demo/demo-etcd/consumer/pom.xml
index 5f79529d6..0c9ed7794 100644
--- a/demo/demo-etcd/consumer/pom.xml
+++ b/demo/demo-etcd/consumer/pom.xml
@@ -44,6 +44,10 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>registry-etcd</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>config-etcd</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/demo/demo-etcd/consumer/src/main/resources/application.yml 
b/demo/demo-etcd/consumer/src/main/resources/application.yml
index a63a16518..e0db5f143 100644
--- a/demo/demo-etcd/consumer/src/main/resources/application.yml
+++ b/demo/demo-etcd/consumer/src/main/resources/application.yml
@@ -25,6 +25,9 @@ servicecomb:
   registry:
     etcd:
       connectString: http://127.0.0.1:2379
+  config:
+    etcd:
+      connectString: http://127.0.0.1:2379
 
   rest:
     address: 0.0.0.0:9092?websocketEnabled=true
diff --git a/demo/demo-etcd/test-client/pom.xml 
b/demo/demo-etcd/test-client/pom.xml
index d14d1b1c4..41a0813cf 100644
--- a/demo/demo-etcd/test-client/pom.xml
+++ b/demo/demo-etcd/test-client/pom.xml
@@ -128,6 +128,7 @@
                       <env>
                         <JAVA_OPTS>
                           
-Dservicecomb.registry.etcd.connectString=http://etcd:2379
+                          
-Dservicecomb.config.etcd.connectString=http://etcd:2379
                         </JAVA_OPTS>
                         
<JAR_PATH>/maven/maven/etcd-consumer-${project.version}.jar</JAR_PATH>
                       </env>
diff --git 
a/dynamic-config/config-etcd/src/main/java/org/apache/servicecomb/config/etcd/EtcdConfig.java
 
b/dynamic-config/config-etcd/src/main/java/org/apache/servicecomb/config/etcd/EtcdConfig.java
index 57713eed0..ee04204c2 100644
--- 
a/dynamic-config/config-etcd/src/main/java/org/apache/servicecomb/config/etcd/EtcdConfig.java
+++ 
b/dynamic-config/config-etcd/src/main/java/org/apache/servicecomb/config/etcd/EtcdConfig.java
@@ -21,17 +21,17 @@ import org.springframework.core.env.Environment;
 public class EtcdConfig {
   public static final String ZOOKEEPER_DEFAULT_ENVIRONMENT = "production";
 
-  public static final String PROPERTY_CONNECT_STRING = 
"servicecomb.config.etcd.connect-string";
+  public static final String PROPERTY_CONNECT_STRING = 
"servicecomb.config.etcd.connectString";
 
-  public static final String PROPERTY_SESSION_TIMEOUT = 
"servicecomb.config.etcd.session-timeout-millis";
+  public static final String PROPERTY_SESSION_TIMEOUT = 
"servicecomb.config.etcd.sessionTimeoutMillis";
 
-  public static final String PROPERTY_CONNECTION_TIMEOUT = 
"servicecomb.config.etcd.connection-timeout-mills";
+  public static final String PROPERTY_CONNECTION_TIMEOUT = 
"servicecomb.config.etcd.connectionTimeoutMills";
 
-  public static final String PROPERTY_AUTH_SCHEMA = 
"servicecomb.config.etcd.authentication-schema";
+  public static final String PROPERTY_AUTH_SCHEMA = 
"servicecomb.config.etcd.authenticationSchema";
 
-  public static final String PROPERTY_AUTH_INFO = 
"servicecomb.config.etcd.authentication-info";
+  public static final String PROPERTY_AUTH_INFO = 
"servicecomb.config.etcd.authenticationInfo";
 
-  public static final String PROPERTY_INSTANCE_TAG = 
"servicecomb.config.etcd.instance-tag";
+  public static final String PROPERTY_INSTANCE_TAG = 
"servicecomb.config.etcd.instanceTag";
 
   private final Environment environment;
 
@@ -40,7 +40,7 @@ public class EtcdConfig {
   }
 
   public String getConnectString() {
-    return environment.getProperty(PROPERTY_CONNECT_STRING, "127.0.0.1:2181");
+    return environment.getProperty(PROPERTY_CONNECT_STRING, 
"http://127.0.0.1:2379";);
   }
 
   public int getSessionTimeoutMillis() {
diff --git 
a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java
 
b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java
index 84f623d74..323e84d80 100644
--- 
a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java
+++ 
b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java
@@ -17,11 +17,11 @@
 
 package org.apache.servicecomb.config;
 
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 import java.util.function.DoubleConsumer;
 import java.util.function.IntConsumer;
@@ -44,17 +44,17 @@ public class DynamicPropertiesImpl implements 
DynamicProperties {
     }
   }
 
-  private final Map<String, Set<Holder<Consumer<String>, String>>> 
stringCallbacks = new HashMap<>();
+  private final Map<String, Set<Holder<Consumer<String>, String>>> 
stringCallbacks = new ConcurrentHashMap<>();
 
-  private final Map<String, Set<Holder<IntConsumer, Integer>>> intCallbacks = 
new HashMap<>();
+  private final Map<String, Set<Holder<IntConsumer, Integer>>> intCallbacks = 
new ConcurrentHashMap<>();
 
-  private final Map<String, Set<Holder<LongConsumer, Long>>> longCallbacks = 
new HashMap<>();
+  private final Map<String, Set<Holder<LongConsumer, Long>>> longCallbacks = 
new ConcurrentHashMap<>();
 
-  private final Map<String, Set<Holder<DoubleConsumer, Float>>> floatCallbacks 
= new HashMap<>();
+  private final Map<String, Set<Holder<DoubleConsumer, Float>>> floatCallbacks 
= new ConcurrentHashMap<>();
 
-  private final Map<String, Set<Holder<DoubleConsumer, Double>>> 
doubleCallbacks = new HashMap<>();
+  private final Map<String, Set<Holder<DoubleConsumer, Double>>> 
doubleCallbacks = new ConcurrentHashMap<>();
 
-  private final Map<String, Set<Holder<Consumer<Boolean>, Boolean>>> 
booleanCallbacks = new HashMap<>();
+  private final Map<String, Set<Holder<Consumer<Boolean>, Boolean>>> 
booleanCallbacks = new ConcurrentHashMap<>();
 
   private final Environment environment;
 
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractDiscoveryFilter.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractDiscoveryFilter.java
index 5883ec51b..f274799c3 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractDiscoveryFilter.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractDiscoveryFilter.java
@@ -19,19 +19,21 @@ package org.apache.servicecomb.registry.discovery;
 
 import java.util.ArrayList;
 
+import org.apache.servicecomb.config.DynamicProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
 
 public abstract class AbstractDiscoveryFilter implements DiscoveryFilter {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractDiscoveryFilter.class);
 
-  protected Environment environment;
+  protected Boolean enabled;
+
+  protected DynamicProperties dynamicProperties;
 
   @Autowired
-  public void setEnvironment(Environment environment) {
-    this.environment = environment;
+  public void setDynamicProperties(DynamicProperties dynamicProperties) {
+    this.dynamicProperties = dynamicProperties;
   }
 
   @Override
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
index dd27dc973..e7a4029bd 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java
@@ -32,6 +32,8 @@ public class InstanceStatusDiscoveryFilter extends 
AbstractGroupDiscoveryFilter
 
   public static final String GROUP_SIZE = "status_group_size";
 
+  public static final String SERVICECOMB_LOADBALANCE_FILTER_STATUS_ENABLED = 
"servicecomb.loadbalance.filter.status.enabled";
+
   @Override
   public int getOrder() {
     return -10000;
@@ -39,7 +41,13 @@ public class InstanceStatusDiscoveryFilter extends 
AbstractGroupDiscoveryFilter
 
   @Override
   public boolean enabled() {
-    return 
environment.getProperty("servicecomb.loadbalance.filter.status.enabled", 
Boolean.class, true);
+
+    if (enabled == null) {
+      enabled = 
dynamicProperties.getBooleanProperty(SERVICECOMB_LOADBALANCE_FILTER_STATUS_ENABLED,
+          value -> enabled = value,
+          true);
+    }
+    return enabled;
   }
 
   @Override
diff --git 
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
 
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
index a30b892f8..d726d1b59 100644
--- 
a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
+++ 
b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
@@ -24,6 +24,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.servicecomb.config.DynamicProperties;
 import org.apache.servicecomb.foundation.common.cache.VersionedCache;
 import 
org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
 import org.apache.servicecomb.registry.DiscoveryManager;
@@ -32,7 +33,6 @@ 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;
 
 public class TestDiscoveryTree {
   DiscoveryContext context = new DiscoveryContext();
@@ -238,11 +238,12 @@ public class TestDiscoveryTree {
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     DiscoveryContext discoveryContext = new DiscoveryContext();
     InstanceStatusDiscoveryFilter filter = new InstanceStatusDiscoveryFilter();
-    Environment environment = Mockito.mock(Environment.class);
-    Mockito.when(environment
-            .getProperty("servicecomb.loadbalance.filter.status.enabled", 
Boolean.class, true))
+    DynamicProperties dynamicProperties = 
Mockito.mock(DynamicProperties.class);
+    
Mockito.when(dynamicProperties.getBooleanProperty(Mockito.eq("servicecomb.loadbalance.filter.status.enabled"),
+            Mockito.any(),
+            Mockito.eq(true)))
         .thenReturn(true);
-    filter.setEnvironment(environment);
+    filter.setDynamicProperties(dynamicProperties);
     discoveryTree.setDiscoveryFilters(List.of(filter));
 
     StatefulDiscoveryInstance instance1 = 
Mockito.mock(StatefulDiscoveryInstance.class);
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
index 5f766e885..87a527c9a 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java
@@ -25,7 +25,6 @@ import 
org.apache.servicecomb.foundation.common.LegacyPropertyFactory;
 
 /**
  * configuration items
- *
  */
 public final class Configuration {
   //// 2.1 configuration items
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/InstancePropertyDiscoveryFilter.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/InstancePropertyDiscoveryFilter.java
index d3811d3a7..2b4c3eb6b 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/InstancePropertyDiscoveryFilter.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/InstancePropertyDiscoveryFilter.java
@@ -30,11 +30,14 @@ import 
org.apache.servicecomb.registry.discovery.DiscoveryTreeNode;
 import org.apache.servicecomb.registry.discovery.StatefulDiscoveryInstance;
 
 /**
- *  Instance property based filter
+ * Instance property based filter
  */
 public class InstancePropertyDiscoveryFilter extends AbstractDiscoveryFilter {
+
   private static final String MATCHED = "matched";
 
+  public static final String 
SERVICECOMB_LOADBALANCE_FILTER_INSTANCE_PROPERTY_ENABLED = 
"servicecomb.loadbalance.filter.instanceProperty.enabled";
+
   @Override
   public int getOrder() {
     return 400;
@@ -42,8 +45,13 @@ public class InstancePropertyDiscoveryFilter extends 
AbstractDiscoveryFilter {
 
   @Override
   public boolean enabled() {
-    return 
environment.getProperty("servicecomb.loadbalance.filter.instanceProperty.enabled",
-        boolean.class, true);
+
+    if (enabled == null) {
+      enabled = 
dynamicProperties.getBooleanProperty(SERVICECOMB_LOADBALANCE_FILTER_INSTANCE_PROPERTY_ENABLED,
+          value -> enabled = value,
+          true);
+    }
+    return enabled;
   }
 
   @Override
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilter.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilter.java
index 7dbe07023..d890b7ea2 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilter.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilter.java
@@ -47,6 +47,8 @@ public class PriorityInstancePropertyDiscoveryFilter extends 
AbstractDiscoveryFi
 
   private static final String ALL_INSTANCE = "allInstance";
 
+  public static final String 
SERVICECOMB_LOADBALANCE_FILTER_PRIORITY_INSTANCE_PROPERTY_KEY = 
"servicecomb.loadbalance.filter.priorityInstanceProperty.key";
+
   private String propertyKey;
 
   private Environment environment;
@@ -58,8 +60,10 @@ public class PriorityInstancePropertyDiscoveryFilter extends 
AbstractDiscoveryFi
 
   @Override
   protected void init(DiscoveryContext context, DiscoveryTreeNode parent) {
-    propertyKey = 
environment.getProperty("servicecomb.loadbalance.filter.priorityInstanceProperty.key",
-        String.class, "environment");
+
+    propertyKey = 
dynamicProperties.getStringProperty(SERVICECOMB_LOADBALANCE_FILTER_PRIORITY_INSTANCE_PROPERTY_KEY,
+        value -> propertyKey = value,
+        "environment");
 
     // group all instance by property
     List<StatefulDiscoveryInstance> instances = parent.data();
@@ -115,8 +119,13 @@ public class PriorityInstancePropertyDiscoveryFilter 
extends AbstractDiscoveryFi
 
   @Override
   public boolean enabled() {
-    return 
environment.getProperty("servicecomb.loadbalance.filter.priorityInstanceProperty.enabled",
-        boolean.class, false);
+
+    if (enabled == null) {
+      enabled = 
dynamicProperties.getBooleanProperty("servicecomb.loadbalance.filter.priorityInstanceProperty.enabled",
+          value -> enabled = value,
+          false);
+    }
+    return enabled;
   }
 
   @Override
@@ -136,7 +145,7 @@ public class PriorityInstancePropertyDiscoveryFilter 
extends AbstractDiscoveryFi
     /**
      * Constructor
      *
-     * @param key property key
+     * @param key   property key
      * @param value property value
      */
     public PriorityInstanceProperty(@NotNull String key, String value) {
@@ -153,7 +162,7 @@ public class PriorityInstancePropertyDiscoveryFilter 
extends AbstractDiscoveryFi
     /**
      * Constructor
      *
-     * @param key property key
+     * @param key                  property key
      * @param microserviceInstance instance
      */
     public PriorityInstanceProperty(@NotNull String key, @NotNull 
StatefulDiscoveryInstance microserviceInstance) {
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ZoneAwareDiscoveryFilter.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ZoneAwareDiscoveryFilter.java
index b39aefe8f..0e521397f 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ZoneAwareDiscoveryFilter.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/ZoneAwareDiscoveryFilter.java
@@ -42,6 +42,11 @@ public class ZoneAwareDiscoveryFilter extends 
AbstractGroupDiscoveryFilter {
 
   private DataCenterProperties dataCenterProperties;
 
+  private Integer ratio;
+
+  private Integer ratioCeiling;
+
+
   @Autowired
   @SuppressWarnings("unused")
   public void setDataCenterProperties(DataCenterProperties 
dataCenterProperties) {
@@ -55,18 +60,33 @@ public class ZoneAwareDiscoveryFilter extends 
AbstractGroupDiscoveryFilter {
 
   @Override
   public boolean enabled() {
-    return environment.getProperty(CONFIG_ENABLED,
-        Boolean.class, true);
+
+    if (enabled == null) {
+      enabled = dynamicProperties.getBooleanProperty(CONFIG_ENABLED,
+          value -> enabled = value,
+          true);
+    }
+    return enabled;
   }
 
   private int getRatio() {
-    return environment.getProperty(CONFIG_RATIO,
-        int.class, 30);
+
+    if (ratio == null) {
+      ratio = dynamicProperties.getIntProperty(CONFIG_RATIO,
+          value -> ratio = value,
+          30);
+    }
+    return ratio;
   }
 
   private int getRatioCeiling(int defaultValue) {
-    return environment.getProperty(CONFIG_RATIO_CEILING,
-        int.class, defaultValue);
+
+    if (ratioCeiling == null) {
+      ratioCeiling = dynamicProperties.getIntProperty(CONFIG_RATIO_CEILING,
+          value -> ratioCeiling = value,
+          defaultValue);
+    }
+    return ratioCeiling;
   }
 
   @Override
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter2.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter2.java
index 25858a980..4c2fb5f5b 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter2.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter2.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 
 import org.apache.servicecomb.config.DataCenterProperties;
+import org.apache.servicecomb.config.DynamicProperties;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.NonSwaggerInvocation;
 import org.apache.servicecomb.core.SCBEngine;
@@ -35,6 +36,7 @@ import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.provider.consumer.ReferenceConfig;
 import org.apache.servicecomb.core.transport.TransportManager;
+import org.apache.servicecomb.foundation.common.LegacyPropertyFactory;
 import org.apache.servicecomb.loadbalance.filter.ServerDiscoveryFilter;
 import org.apache.servicecomb.loadbalance.filter.ZoneAwareDiscoveryFilter;
 import org.apache.servicecomb.registry.DiscoveryManager;
@@ -54,18 +56,30 @@ import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.Operation;
 
 public class TestLoadBalanceFilter2 {
+  DynamicProperties dynamicProperties = Mockito.mock(DynamicProperties.class);
+
   Environment environment = Mockito.mock(Environment.class);
 
   @BeforeEach
   public void setUp() {
+
     
Mockito.when(environment.getProperty("servicecomb.loadbalance.userDefinedEndpoint.enabled",
         boolean.class, false)).thenReturn(false);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.enabled",
-        Boolean.class, true)).thenReturn(true);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratio",
-        int.class, 30)).thenReturn(0);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratioCeiling",
-        int.class, 100)).thenReturn(100);
+
+    
Mockito.when(dynamicProperties.getBooleanProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.enabled"),
+            Mockito.any(),
+            Mockito.eq(true)))
+        .thenReturn(true);
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratio"),
+            Mockito.any(),
+            Mockito.eq(30)))
+        .thenReturn(0);
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratioCeiling"),
+            Mockito.any(),
+            Mockito.eq(100)))
+        .thenReturn(100);
+
+    LegacyPropertyFactory.setEnvironment(environment);
   }
 
   @Test
@@ -148,7 +162,7 @@ public class TestLoadBalanceFilter2 {
         .thenReturn(parent);
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     ZoneAwareDiscoveryFilter zoneAwareDiscoveryFilter = new 
ZoneAwareDiscoveryFilter();
-    zoneAwareDiscoveryFilter.setEnvironment(environment);
+    zoneAwareDiscoveryFilter.setDynamicProperties(dynamicProperties);
     zoneAwareDiscoveryFilter.setDataCenterProperties(myself);
     ServerDiscoveryFilter serverDiscoveryFilter = new ServerDiscoveryFilter();
     serverDiscoveryFilter.setScbEngine(scbEngine);
@@ -239,7 +253,7 @@ public class TestLoadBalanceFilter2 {
         .thenReturn(parent);
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     ZoneAwareDiscoveryFilter zoneAwareDiscoveryFilter = new 
ZoneAwareDiscoveryFilter();
-    zoneAwareDiscoveryFilter.setEnvironment(environment);
+    zoneAwareDiscoveryFilter.setDynamicProperties(dynamicProperties);
     zoneAwareDiscoveryFilter.setDataCenterProperties(myself);
     ServerDiscoveryFilter serverDiscoveryFilter = new ServerDiscoveryFilter();
     serverDiscoveryFilter.setScbEngine(scbEngine);
@@ -339,7 +353,7 @@ public class TestLoadBalanceFilter2 {
         .thenReturn(parent);
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     ZoneAwareDiscoveryFilter zoneAwareDiscoveryFilter = new 
ZoneAwareDiscoveryFilter();
-    zoneAwareDiscoveryFilter.setEnvironment(environment);
+    zoneAwareDiscoveryFilter.setDynamicProperties(dynamicProperties);
     zoneAwareDiscoveryFilter.setDataCenterProperties(myself);
     ServerDiscoveryFilter serverDiscoveryFilter = new ServerDiscoveryFilter();
     serverDiscoveryFilter.setScbEngine(scbEngine);
@@ -437,7 +451,7 @@ public class TestLoadBalanceFilter2 {
         .thenReturn(parent);
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     ZoneAwareDiscoveryFilter zoneAwareDiscoveryFilter = new 
ZoneAwareDiscoveryFilter();
-    zoneAwareDiscoveryFilter.setEnvironment(environment);
+    zoneAwareDiscoveryFilter.setDynamicProperties(dynamicProperties);
     zoneAwareDiscoveryFilter.setDataCenterProperties(myself);
     ServerDiscoveryFilter serverDiscoveryFilter = new ServerDiscoveryFilter();
     serverDiscoveryFilter.setScbEngine(scbEngine);
@@ -534,7 +548,7 @@ public class TestLoadBalanceFilter2 {
         .thenReturn(parent);
     DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
     ZoneAwareDiscoveryFilter zoneAwareDiscoveryFilter = new 
ZoneAwareDiscoveryFilter();
-    zoneAwareDiscoveryFilter.setEnvironment(environment);
+    zoneAwareDiscoveryFilter.setDynamicProperties(dynamicProperties);
     zoneAwareDiscoveryFilter.setDataCenterProperties(myself);
     ServerDiscoveryFilter serverDiscoveryFilter = new ServerDiscoveryFilter();
     serverDiscoveryFilter.setScbEngine(scbEngine);
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilterTest.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilterTest.java
index 23f7c92f6..7c78388dc 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilterTest.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/PriorityInstancePropertyDiscoveryFilterTest.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.config.DynamicProperties;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.registry.api.DiscoveryInstance;
 import org.apache.servicecomb.registry.discovery.DiscoveryContext;
@@ -59,6 +60,8 @@ public class PriorityInstancePropertyDiscoveryFilterTest {
 
   EnumerablePropertySource propertySource;
 
+  DynamicProperties dynamicProperties = Mockito.mock(DynamicProperties.class);
+
   @Before
   public void setUp() {
     propertySource = Mockito.mock(EnumerablePropertySource.class);
@@ -71,8 +74,10 @@ public class PriorityInstancePropertyDiscoveryFilterTest {
 
     filter = new PriorityInstancePropertyDiscoveryFilter();
     filter.setEnvironment(environment);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.priorityInstanceProperty.key",
-        String.class, "environment")).thenReturn("environment");
+    filter.setDynamicProperties(dynamicProperties);
+    
Mockito.when(dynamicProperties.getStringProperty(Mockito.eq("servicecomb.loadbalance.filter.priorityInstanceProperty.key"),
+        Mockito.any(),
+        Mockito.eq("environment"))).thenReturn("environment");
     instances = new ArrayList<>();
     filter.setEnvironment(environment);
     DiscoveryInstance discoveryInstance1 = 
Mockito.mock(DiscoveryInstance.class);
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestZoneAwareDiscoveryFilter.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestZoneAwareDiscoveryFilter.java
index 13a5f6da9..05b6d5432 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestZoneAwareDiscoveryFilter.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/filter/TestZoneAwareDiscoveryFilter.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.servicecomb.config.DataCenterProperties;
+import org.apache.servicecomb.config.DynamicProperties;
 import org.apache.servicecomb.registry.api.DataCenterInfo;
 import org.apache.servicecomb.registry.api.DiscoveryInstance;
 import org.apache.servicecomb.registry.discovery.DiscoveryContext;
@@ -30,26 +31,33 @@ 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;
 
 public class TestZoneAwareDiscoveryFilter {
-  Environment environment = Mockito.mock(Environment.class);
+  DynamicProperties dynamicProperties = Mockito.mock(DynamicProperties.class);
 
   @BeforeEach
   public void setUp() {
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.enabled",
-        Boolean.class, true)).thenReturn(true);
+
+    
Mockito.when(dynamicProperties.getBooleanProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.enabled"),
+            Mockito.any(),
+            Mockito.eq(true)))
+        .thenReturn(true);
   }
 
   @Test
   public void test_not_enough_instance() {
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratio",
-        int.class, 30)).thenReturn(50);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratioCeiling",
-        int.class, 50)).thenReturn(70);
+
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratio"),
+            Mockito.any(),
+            Mockito.eq(30)))
+        .thenReturn(50);
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratioCeiling"),
+            Mockito.any(),
+            Mockito.eq(50)))
+        .thenReturn(70);
 
     ZoneAwareDiscoveryFilter filter = new ZoneAwareDiscoveryFilter();
-    filter.setEnvironment(environment);
+    filter.setDynamicProperties(dynamicProperties);
 
     // set up data
     DataCenterProperties myself = new DataCenterProperties();
@@ -113,13 +121,18 @@ public class TestZoneAwareDiscoveryFilter {
 
   @Test
   public void test_not_enough_instance_both_ceiling_floor() {
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratio",
-        int.class, 30)).thenReturn(40);
-    
Mockito.when(environment.getProperty("servicecomb.loadbalance.filter.zoneaware.ratioCeiling",
-        int.class, 60)).thenReturn(60);
+
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratio"),
+            Mockito.any(),
+            Mockito.eq(30)))
+        .thenReturn(40);
+    
Mockito.when(dynamicProperties.getIntProperty(Mockito.eq("servicecomb.loadbalance.filter.zoneaware.ratioCeiling"),
+            Mockito.any(),
+            Mockito.eq(60)))
+        .thenReturn(60);
 
     ZoneAwareDiscoveryFilter filter = new ZoneAwareDiscoveryFilter();
-    filter.setEnvironment(environment);
+    filter.setDynamicProperties(dynamicProperties);
 
     // set up data
     DataCenterProperties myself = new DataCenterProperties();

Reply via email to