diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java index 0cdc97cf814..a31e95a0249 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java @@ -66,4 +66,6 @@ String validation() default ""; Argument[] arguments() default {}; + + String merger() default ""; } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java index d7d90465ede..2d962b1ba15 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java @@ -280,4 +280,10 @@ * @since 2.7.3 */ String id() default ""; + + /** + * Group merger + * @return + */ + String merger() default ""; } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java index c0e777bd637..7fae1d6b501 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java @@ -61,10 +61,11 @@ public class MethodConfigTest { private static final int ARGUMENTS_INDEX = 24; private static final boolean ARGUMENTS_CALLBACK = true; private static final String ARGUMENTS_TYPE = "sss"; + private static final String MERGER = "false"; @Reference(methods = {@Method(name = METHOD_NAME, timeout = TIMEOUT, retries = RETRIES, loadbalance = LOADBALANCE, async = ASYNC, actives = ACTIVES, executes = EXECUTES, deprecated = DEPERECATED, sticky = STICKY, oninvoke = ONINVOKE, onthrow = ONTHROW, onreturn = ONRETURN, cache = CACHE, validation = VALIDATION, - arguments = {@Argument(index = ARGUMENTS_INDEX, callback = ARGUMENTS_CALLBACK, type = ARGUMENTS_TYPE)})}) + arguments = {@Argument(index = ARGUMENTS_INDEX, callback = ARGUMENTS_CALLBACK, type = ARGUMENTS_TYPE)}, merger = MERGER)}) private String testField; @Test @@ -90,6 +91,7 @@ public void testStaticConstructor() throws NoSuchFieldException { assertThat(ARGUMENTS_INDEX, equalTo(methodConfig.getArguments().get(0).getIndex().intValue())); assertThat(ARGUMENTS_CALLBACK, equalTo(methodConfig.getArguments().get(0).isCallback())); assertThat(ARGUMENTS_TYPE, equalTo(methodConfig.getArguments().get(0).getType())); + assertThat(MERGER,equalTo(methodConfig.getMerger())); } @Test @@ -237,4 +239,11 @@ public void testReturn() throws Exception { method.setReturn(true); assertThat(method.isReturn(), is(true)); } + + @Test + public void testSetMerger() throws Exception { + MethodConfig method = new MethodConfig(); + method.setMerger("default"); + assertThat(method.getMerger(),equalTo("default")); + } } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java index b77a33cbf56..f10217e77c2 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java @@ -145,12 +145,14 @@ public void testConstructWithReferenceAnnotation() throws NoSuchFieldException { Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getOnreturn(), "r"); Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getOnthrow(), "t"); Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getCache(), "c"); + Assertions.assertEquals("true", referenceConfig.getMerger()); + Assertions.assertEquals("false", ((MethodConfig) referenceConfig.getMethods().get(0)).getMerger()); } - @Reference(methods = {@Method(name = "sayHello", timeout = 1300, retries = 4, loadbalance = "random", async = true, + @Reference(merger="true", methods = {@Method(name = "sayHello", timeout = 1300, retries = 4, loadbalance = "random", async = true, actives = 3, executes = 5, deprecated = true, sticky = true, oninvoke = "i", onthrow = "t", onreturn = "r", cache = "c", validation = "v", - arguments = {@Argument(index = 24, callback = true, type = "sss")})}) + arguments = {@Argument(index = 24, callback = true, type = "sss")}, merger = "false")}) private InnerTest innerTest; private class InnerTest { diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java index 15ceecc5302..0bc8696ac5c 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java @@ -115,6 +115,7 @@ public void test() { Assert.assertEquals("cache", referenceBean.getCache()); Assert.assertEquals("default,default", referenceBean.getFilter()); Assert.assertEquals("default,default", referenceBean.getListener()); + Assert.assertEquals("true",referenceBean.getMerger()); Map data = new LinkedHashMap(); data.put("key1", "value1"); @@ -141,7 +142,7 @@ private static class TestBean { loadbalance = "random", async = true, actives = 1, sent = true, mock = "mock", validation = "validation", timeout = 2, cache = "cache", filter = {"default", "default"}, listener = {"default", "default"}, parameters = {"key1", "value1"}, application = "application", - module = "module", consumer = "consumer", monitor = "monitor", registry = {"registry1", "registry2"} + module = "module", consumer = "consumer", monitor = "monitor", registry = {"registry1", "registry2"}, merger = "true" ) private DemoService demoService; diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java index 13f1e00a2c8..779ac66e345 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java @@ -17,6 +17,8 @@ package org.apache.dubbo.config.spring.beans.factory.annotation; +import org.apache.dubbo.config.MethodConfig; +import org.apache.dubbo.config.annotation.Method; import org.apache.dubbo.config.annotation.Reference; import org.apache.dubbo.config.spring.ReferenceBean; @@ -30,6 +32,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import static org.springframework.core.annotation.AnnotationUtils.findAnnotation; @@ -61,7 +64,8 @@ public class ReferenceBeanBuilderTest { timeout = 3, cache = "cache", filter = {"echo", "generic", "accesslog"}, listener = {"deprecated"}, parameters = {"n1=v1 ", "n2 = v2 ", " n3 = v3 "}, application = "application", - module = "module", consumer = "consumer", monitor = "monitor", registry = {"registry"} + module = "module", consumer = "consumer", monitor = "monitor", registry = {"registry"}, + merger = "true", methods = {@Method(name = "method1", timeout = 1000, merger = "false")} ) private static final Object TEST_FIELD = new Object(); @@ -121,5 +125,17 @@ public void testBuild() throws Exception { Assert.assertNull(referenceBean.getConsumer()); Assert.assertNull(referenceBean.getMonitor()); Assert.assertEquals(Collections.emptyList(), referenceBean.getRegistries()); + + // merge + Assert.assertEquals("true", referenceBean.getMerger()); + + // method + List methods = referenceBean.getMethods(); + Assert.assertNotNull(methods); + Assert.assertEquals(1, methods.size()); + MethodConfig methodConfig = methods.get(0); + Assert.assertEquals("false", methodConfig.getMerger()); + Assert.assertEquals(1000, methodConfig.getTimeout().intValue()); + } }