You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2021/04/06 06:26:04 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2253] reduce invoke setter when configuration changed for @InjectProperties

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

wujimin 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 0754bf3  [SCB-2253] reduce invoke setter when configuration changed for @InjectProperties
0754bf3 is described below

commit 0754bf339e6ffc9840ea7a18ff3ac1fd28fe31d8
Author: wujimin <wu...@huawei.com>
AuthorDate: Tue Apr 6 08:56:31 2021 +0800

    [SCB-2253] reduce invoke setter when configuration changed for @InjectProperties
---
 .../core/exception/DefaultExceptionProcessor.java         |  3 +++
 .../servicecomb/config/priority/ConfigObjectProperty.java |  8 ++++++--
 .../servicecomb/config/priority/PriorityProperty.java     | 15 +++++++++++++++
 .../config/priority/PriorityPropertyManager.java          |  6 ++++--
 4 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/exception/DefaultExceptionProcessor.java b/core/src/main/java/org/apache/servicecomb/core/exception/DefaultExceptionProcessor.java
index 724e8b0..e18f5e8 100644
--- a/core/src/main/java/org/apache/servicecomb/core/exception/DefaultExceptionProcessor.java
+++ b/core/src/main/java/org/apache/servicecomb/core/exception/DefaultExceptionProcessor.java
@@ -48,6 +48,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
 @Component
 @InjectProperties(prefix = "servicecomb.invocation.exception")
 public class DefaultExceptionProcessor implements ExceptionProcessor {
@@ -55,6 +57,7 @@ public class DefaultExceptionProcessor implements ExceptionProcessor {
 
   public static final int ORDER = Integer.MAX_VALUE;
 
+  @JsonIgnore
   @SuppressWarnings("unchecked")
   private final List<ExceptionConverter<Throwable>> converters = SPIServiceUtils
       .getOrLoadSortedService(ExceptionConverter.class).stream()
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/ConfigObjectProperty.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/ConfigObjectProperty.java
index 7231999..e81465b 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/ConfigObjectProperty.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/ConfigObjectProperty.java
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.config.priority;
 
+import javax.annotation.Nullable;
+
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 
 /**
@@ -32,7 +34,9 @@ public class ConfigObjectProperty {
     this.property = property;
   }
 
-  public void updateValue(Object instance) {
-    setter.set(instance, property.getValue());
+  public void updateValueWhenChanged(Object instance, @Nullable String changedKey) {
+    if (property.isChangedKey(changedKey)) {
+      setter.set(instance, property.getValue());
+    }
   }
 }
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
index faad071..3af93c8 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
@@ -180,4 +180,19 @@ public class PriorityProperty<T> {
   public T getValue() {
     return finalValue;
   }
+
+  public boolean isChangedKey(String changedKey) {
+    if (changedKey == null) {
+      // property source changed or clear, and so on
+      return true;
+    }
+
+    for (DynamicProperty property : properties) {
+      if (changedKey.equals(property.getName())) {
+        return true;
+      }
+    }
+    
+    return false;
+  }
 }
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityPropertyManager.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityPropertyManager.java
index 7cf6eaf..15a1b5b 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityPropertyManager.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityPropertyManager.java
@@ -63,10 +63,12 @@ public class PriorityPropertyManager {
       return;
     }
 
-    // just update all properties, it's very fast, no need to do any optimize
+    // just loop all properties, it's very fast, no need to do any optimize
     for (Entry<Object, List<ConfigObjectProperty>> entry : configObjectMap.entrySet()) {
       Object instance = entry.getKey();
-      entry.getValue().forEach(configObjectProperty -> configObjectProperty.updateValue(instance));
+      entry.getValue()
+          .forEach(
+              configObjectProperty -> configObjectProperty.updateValueWhenChanged(instance, event.getPropertyName()));
     }
   }