From 79736c5f4758b56f805209a8cf99ee2c69eb5899 Mon Sep 17 00:00:00 2001 From: yanhom Date: Sun, 4 Sep 2022 23:04:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?support=20dubbo=202.7.3=E3=80=81optimize=20?= =?UTF-8?q?apollo=20refresher=E3=80=81support=20spring=20low=20version=20g?= =?UTF-8?q?et=20anno=20of=20bean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbo/apache/ApacheDubboDtpAdapter.java | 26 +++-- .../com/dtp/core/spring/DtpPostProcessor.java | 36 +++++-- .../example/controller/TestController.java | 94 +++++++++---------- .../example/controller/TestController.java | 94 +++++++++---------- .../condition/OnApacheDubboCondition.java | 3 + .../apollo/refresh/ApolloRefresher.java | 36 +++---- 6 files changed, 155 insertions(+), 134 deletions(-) diff --git a/adapter/adapter-dubbo/src/main/java/com/dtp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java b/adapter/adapter-dubbo/src/main/java/com/dtp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java index ee329796..02ffc2ec 100644 --- a/adapter/adapter-dubbo/src/main/java/com/dtp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java +++ b/adapter/adapter-dubbo/src/main/java/com/dtp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java @@ -21,8 +21,6 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; -import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_SERVICE_COMPONENT_KEY; - /** * ApacheDubboDtpAdapter related * @@ -53,13 +51,9 @@ public class ApacheDubboDtpAdapter extends AbstractDtpAdapter { String currVersion = Version.getVersion(); if (DubboVersion.compare(DubboVersion.VERSION_2_7_5, currVersion) > 0) { DataStore dataStore = ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension(); - Map executors = dataStore.get(EXECUTOR_SERVICE_COMPONENT_KEY); + Map executors = dataStore.get(ExecutorService.class.getName()); if (MapUtil.isNotEmpty(executors)) { - executors.forEach((k, v) -> { - val name = genTpName(k); - val executorWrapper = new ExecutorWrapper(name, (ThreadPoolExecutor) v); - DUBBO_EXECUTORS.put(name, executorWrapper); - }); + executors.forEach((k, v) -> doInit(k, (ThreadPoolExecutor) v)); } return; } @@ -76,18 +70,20 @@ public class ApacheDubboDtpAdapter extends AbstractDtpAdapter { if (Objects.isNull(data)) { return; } - Map executorMap = data.get(EXECUTOR_SERVICE_COMPONENT_KEY); + Map executorMap = data.get(ExecutorService.class.getName()); if (MapUtil.isNotEmpty(executorMap)) { - executorMap.forEach((k, v) -> { - val name = genTpName(k.toString()); - val executorWrapper = new ExecutorWrapper(name, (ThreadPoolExecutor) v); - initNotifyItems(name, executorWrapper); - DUBBO_EXECUTORS.put(name, executorWrapper); - }); + executorMap.forEach((k, v) -> doInit(k.toString(), (ThreadPoolExecutor) v)); } log.info("DynamicTp adapter, apache dubbo executors init end, executors: {}", DUBBO_EXECUTORS); } + private void doInit(String port, ThreadPoolExecutor executor) { + val name = genTpName(port); + val executorWrapper = new ExecutorWrapper(name, executor); + initNotifyItems(name, executorWrapper); + DUBBO_EXECUTORS.put(name, executorWrapper); + } + private String genTpName(String port) { return NAME + "#" + port; } diff --git a/core/src/main/java/com/dtp/core/spring/DtpPostProcessor.java b/core/src/main/java/com/dtp/core/spring/DtpPostProcessor.java index 7e33d192..5848b822 100644 --- a/core/src/main/java/com/dtp/core/spring/DtpPostProcessor.java +++ b/core/src/main/java/com/dtp/core/spring/DtpPostProcessor.java @@ -1,5 +1,6 @@ package com.dtp.core.spring; +import cn.hutool.core.lang.Opt; import com.dtp.common.ApplicationContextHolder; import com.dtp.common.dto.ExecutorWrapper; import com.dtp.core.DtpRegistry; @@ -11,13 +12,20 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.ApplicationContext; - -import java.util.concurrent.ThreadPoolExecutor; +import org.springframework.core.type.MethodMetadata; import org.springframework.lang.NonNull; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.Collections; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ThreadPoolExecutor; + /** * BeanPostProcessor that handles all related beans managed by Spring. * @@ -44,18 +52,32 @@ public class DtpPostProcessor implements BeanPostProcessor { } ApplicationContext applicationContext = ApplicationContextHolder.getInstance(); - DynamicTp dynamicTp; + String dtpAnnoVal = null; try { - dynamicTp = applicationContext.findAnnotationOnBean(beanName, DynamicTp.class); - if (dynamicTp == null) { - return bean; + DynamicTp dynamicTp = applicationContext.findAnnotationOnBean(beanName, DynamicTp.class); + if (Objects.nonNull(dynamicTp)) { + dtpAnnoVal = dynamicTp.value(); + } else { + BeanDefinitionRegistry registry = (BeanDefinitionRegistry) applicationContext; + BeanDefinition beanDefinition = registry.getBeanDefinition(beanName); + if (beanDefinition instanceof AnnotatedBeanDefinition && + beanDefinition.getSource() instanceof MethodMetadata) { + MethodMetadata beanMethod = (MethodMetadata) beanDefinition.getSource(); + if (Objects.isNull(beanMethod) || !beanMethod.isAnnotated(DynamicTp.class.getName())) { + return bean; + } + dtpAnnoVal = Optional.ofNullable(beanMethod.getAnnotationAttributes(DynamicTp.class.getName())) + .orElse(Collections.emptyMap()) + .getOrDefault("value", "") + .toString(); + } } } catch (NoSuchBeanDefinitionException e) { log.error("There is no bean with the given name {}", beanName, e); return bean; } - String poolName = StringUtils.isNotBlank(dynamicTp.value()) ? dynamicTp.value() : beanName; + String poolName = StringUtils.isNotBlank(dtpAnnoVal) ? dtpAnnoVal : beanName; if (bean instanceof ThreadPoolTaskExecutor) { ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) bean; registerCommon(poolName, taskExecutor.getThreadPoolExecutor()); diff --git a/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java b/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java index 79e445b1..21bd1689 100644 --- a/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java +++ b/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java @@ -1,47 +1,47 @@ -package com.dtp.example.controller; - -import com.dtp.core.DtpRegistry; -import com.dtp.core.support.runnable.NamedRunnable; -import com.dtp.core.thread.DtpExecutor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * @author Redick01 - */ -@Slf4j -@RestController -@SuppressWarnings("all") -public class TestController { - - @Resource - private ThreadPoolExecutor dtpExecutor1; - - @GetMapping("/dtp-nacos-example/test") - public String test() throws InterruptedException { - task(); - return "success"; - } - - public void task() throws InterruptedException { - DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); - for (int i = 0; i < 100; i++) { - Thread.sleep(100); - dtpExecutor1.execute(() -> { - log.info("i am dynamic-tp-test-1 task"); - }); - dtpExecutor2.execute(NamedRunnable.of(() -> { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - log.info("i am dynamic-tp-test-2 task"); - }, "task-" + i)); - } - } -} +//package com.dtp.example.controller; +// +//import com.dtp.core.DtpRegistry; +//import com.dtp.core.support.runnable.NamedRunnable; +//import com.dtp.core.thread.DtpExecutor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.web.bind.annotation.GetMapping; +//import org.springframework.web.bind.annotation.RestController; +// +//import javax.annotation.Resource; +//import java.util.concurrent.ThreadPoolExecutor; +// +///** +// * @author Redick01 +// */ +//@Slf4j +//@RestController +//@SuppressWarnings("all") +//public class TestController { +// +// @Resource +// private ThreadPoolExecutor dtpExecutor1; +// +// @GetMapping("/dtp-nacos-example/test") +// public String test() throws InterruptedException { +// task(); +// return "success"; +// } +// +// public void task() throws InterruptedException { +// DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); +// for (int i = 0; i < 100; i++) { +// Thread.sleep(100); +// dtpExecutor1.execute(() -> { +// log.info("i am dynamic-tp-test-1 task"); +// }); +// dtpExecutor2.execute(NamedRunnable.of(() -> { +// try { +// Thread.sleep(1000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// log.info("i am dynamic-tp-test-2 task"); +// }, "task-" + i)); +// } +// } +//} diff --git a/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java b/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java index 79e445b1..21bd1689 100644 --- a/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java +++ b/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java @@ -1,47 +1,47 @@ -package com.dtp.example.controller; - -import com.dtp.core.DtpRegistry; -import com.dtp.core.support.runnable.NamedRunnable; -import com.dtp.core.thread.DtpExecutor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * @author Redick01 - */ -@Slf4j -@RestController -@SuppressWarnings("all") -public class TestController { - - @Resource - private ThreadPoolExecutor dtpExecutor1; - - @GetMapping("/dtp-nacos-example/test") - public String test() throws InterruptedException { - task(); - return "success"; - } - - public void task() throws InterruptedException { - DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); - for (int i = 0; i < 100; i++) { - Thread.sleep(100); - dtpExecutor1.execute(() -> { - log.info("i am dynamic-tp-test-1 task"); - }); - dtpExecutor2.execute(NamedRunnable.of(() -> { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - log.info("i am dynamic-tp-test-2 task"); - }, "task-" + i)); - } - } -} +//package com.dtp.example.controller; +// +//import com.dtp.core.DtpRegistry; +//import com.dtp.core.support.runnable.NamedRunnable; +//import com.dtp.core.thread.DtpExecutor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.web.bind.annotation.GetMapping; +//import org.springframework.web.bind.annotation.RestController; +// +//import javax.annotation.Resource; +//import java.util.concurrent.ThreadPoolExecutor; +// +///** +// * @author Redick01 +// */ +//@Slf4j +//@RestController +//@SuppressWarnings("all") +//public class TestController { +// +// @Resource +// private ThreadPoolExecutor dtpExecutor1; +// +// @GetMapping("/dtp-nacos-example/test") +// public String test() throws InterruptedException { +// task(); +// return "success"; +// } +// +// public void task() throws InterruptedException { +// DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); +// for (int i = 0; i < 100; i++) { +// Thread.sleep(100); +// dtpExecutor1.execute(() -> { +// log.info("i am dynamic-tp-test-1 task"); +// }); +// dtpExecutor2.execute(NamedRunnable.of(() -> { +// try { +// Thread.sleep(1000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// log.info("i am dynamic-tp-test-2 task"); +// }, "task-" + i)); +// } +// } +//} diff --git a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/com/dtp/starter/adapter/dubbo/autoconfigure/condition/OnApacheDubboCondition.java b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/com/dtp/starter/adapter/dubbo/autoconfigure/condition/OnApacheDubboCondition.java index 20d47f95..05a89668 100644 --- a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/com/dtp/starter/adapter/dubbo/autoconfigure/condition/OnApacheDubboCondition.java +++ b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/com/dtp/starter/adapter/dubbo/autoconfigure/condition/OnApacheDubboCondition.java @@ -21,4 +21,7 @@ public class OnApacheDubboCondition extends AnyNestedCondition { @ConditionalOnBean(type = "org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationPostProcessor") static class ServiceAnnotationBpp {} + + @ConditionalOnBean(type = "org.apache.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor") + static class ServiceAnnotationBeanBpp {} } \ No newline at end of file diff --git a/starter/starter-configcenter/starter-apollo/src/main/java/com/dtp/starter/apollo/refresh/ApolloRefresher.java b/starter/starter-configcenter/starter-apollo/src/main/java/com/dtp/starter/apollo/refresh/ApolloRefresher.java index 34e4e760..e55c377a 100644 --- a/starter/starter-configcenter/starter-apollo/src/main/java/com/dtp/starter/apollo/refresh/ApolloRefresher.java +++ b/starter/starter-configcenter/starter-apollo/src/main/java/com/dtp/starter/apollo/refresh/ApolloRefresher.java @@ -1,11 +1,10 @@ package com.dtp.starter.apollo.refresh; -import com.ctrip.framework.apollo.Config; -import com.ctrip.framework.apollo.ConfigChangeListener; import com.ctrip.framework.apollo.ConfigFile; +import com.ctrip.framework.apollo.ConfigFileChangeListener; import com.ctrip.framework.apollo.ConfigService; import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; -import com.ctrip.framework.apollo.model.ConfigChangeEvent; +import com.ctrip.framework.apollo.model.ConfigFileChangeEvent; import com.dtp.common.config.DtpProperties; import com.dtp.common.em.ConfigFileTypeEnum; import com.dtp.core.refresh.AbstractRefresher; @@ -15,13 +14,13 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; /** - * NacosRefresher related + * ApolloRefresher related * * @author: yanhom * @since 1.0.0 **/ @Slf4j -public class ApolloRefresher extends AbstractRefresher implements ConfigChangeListener, InitializingBean { +public class ApolloRefresher extends AbstractRefresher implements ConfigFileChangeListener, InitializingBean { @Value("${apollo.bootstrap.namespaces:application}") private String namespace; @@ -31,29 +30,30 @@ public class ApolloRefresher extends AbstractRefresher implements ConfigChangeLi @Override public void afterPropertiesSet() { - String[] apolloNamespaces = this.namespace.split(","); - String realNamespace = apolloNamespaces[0]; + String dtpNameSpace; DtpProperties.Apollo apollo = dtpProperties.getApollo(); if (apollo != null && StringUtils.isNotBlank(apollo.getNamespace())) { - realNamespace = apollo.getNamespace(); + dtpNameSpace = apollo.getNamespace(); + } else { + String[] apolloNamespaces = this.namespace.split(","); + dtpNameSpace = apolloNamespaces[0]; } - configFileType = deduceFileType(realNamespace); - namespace = realNamespace.replaceAll("." + configFileType.getValue(), ""); - Config config = ConfigService.getConfig(realNamespace); + configFileType = deduceFileType(dtpNameSpace); + namespace = dtpNameSpace.replaceAll("." + configFileType.getValue(), ""); + ConfigFileFormat configFileFormat = ConfigFileFormat.fromString(configFileType.getValue()); + ConfigFile configFile = ConfigService.getConfigFile(namespace, configFileFormat); try { - config.addChangeListener(this); - log.info("DynamicTp refresher, add listener success, namespace: {}", realNamespace); + configFile.addChangeListener(this); + log.info("DynamicTp refresher, add listener success, namespace: {}", dtpNameSpace); } catch (Exception e) { - log.error("DynamicTp refresher, add listener error, namespace: {}", realNamespace, e); + log.error("DynamicTp refresher, add listener error, namespace: {}", dtpNameSpace, e); } } @Override - public void onChange(ConfigChangeEvent changeEvent) { - ConfigFile configFile = ConfigService.getConfigFile(namespace, - ConfigFileFormat.fromString(configFileType.getValue())); - String content = configFile.getContent(); + public void onChange(ConfigFileChangeEvent changeEvent) { + String content = changeEvent.getNewValue(); refresh(content, configFileType); } -- Gitee From bdbb4be965948b6e94f21f0527a08d0039d8f50b Mon Sep 17 00:00:00 2001 From: yanhom Date: Sun, 4 Sep 2022 23:06:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?support=20dubbo=202.7.3=E3=80=81optimize=20?= =?UTF-8?q?apollo=20refresher=E3=80=81support=20spring=20low=20version=20g?= =?UTF-8?q?et=20anno=20of=20bean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/controller/TestController.java | 94 +++++++++---------- .../example/controller/TestController.java | 94 +++++++++---------- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java b/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java index 21bd1689..79e445b1 100644 --- a/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java +++ b/example/example-apollo/src/main/java/com/dtp/example/controller/TestController.java @@ -1,47 +1,47 @@ -//package com.dtp.example.controller; -// -//import com.dtp.core.DtpRegistry; -//import com.dtp.core.support.runnable.NamedRunnable; -//import com.dtp.core.thread.DtpExecutor; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.web.bind.annotation.GetMapping; -//import org.springframework.web.bind.annotation.RestController; -// -//import javax.annotation.Resource; -//import java.util.concurrent.ThreadPoolExecutor; -// -///** -// * @author Redick01 -// */ -//@Slf4j -//@RestController -//@SuppressWarnings("all") -//public class TestController { -// -// @Resource -// private ThreadPoolExecutor dtpExecutor1; -// -// @GetMapping("/dtp-nacos-example/test") -// public String test() throws InterruptedException { -// task(); -// return "success"; -// } -// -// public void task() throws InterruptedException { -// DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); -// for (int i = 0; i < 100; i++) { -// Thread.sleep(100); -// dtpExecutor1.execute(() -> { -// log.info("i am dynamic-tp-test-1 task"); -// }); -// dtpExecutor2.execute(NamedRunnable.of(() -> { -// try { -// Thread.sleep(1000); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// log.info("i am dynamic-tp-test-2 task"); -// }, "task-" + i)); -// } -// } -//} +package com.dtp.example.controller; + +import com.dtp.core.DtpRegistry; +import com.dtp.core.support.runnable.NamedRunnable; +import com.dtp.core.thread.DtpExecutor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author Redick01 + */ +@Slf4j +@RestController +@SuppressWarnings("all") +public class TestController { + + @Resource + private ThreadPoolExecutor dtpExecutor1; + + @GetMapping("/dtp-nacos-example/test") + public String test() throws InterruptedException { + task(); + return "success"; + } + + public void task() throws InterruptedException { + DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); + for (int i = 0; i < 100; i++) { + Thread.sleep(100); + dtpExecutor1.execute(() -> { + log.info("i am dynamic-tp-test-1 task"); + }); + dtpExecutor2.execute(NamedRunnable.of(() -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + log.info("i am dynamic-tp-test-2 task"); + }, "task-" + i)); + } + } +} diff --git a/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java b/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java index 21bd1689..79e445b1 100644 --- a/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java +++ b/example/example-nacos/src/main/java/com/dtp/example/controller/TestController.java @@ -1,47 +1,47 @@ -//package com.dtp.example.controller; -// -//import com.dtp.core.DtpRegistry; -//import com.dtp.core.support.runnable.NamedRunnable; -//import com.dtp.core.thread.DtpExecutor; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.web.bind.annotation.GetMapping; -//import org.springframework.web.bind.annotation.RestController; -// -//import javax.annotation.Resource; -//import java.util.concurrent.ThreadPoolExecutor; -// -///** -// * @author Redick01 -// */ -//@Slf4j -//@RestController -//@SuppressWarnings("all") -//public class TestController { -// -// @Resource -// private ThreadPoolExecutor dtpExecutor1; -// -// @GetMapping("/dtp-nacos-example/test") -// public String test() throws InterruptedException { -// task(); -// return "success"; -// } -// -// public void task() throws InterruptedException { -// DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); -// for (int i = 0; i < 100; i++) { -// Thread.sleep(100); -// dtpExecutor1.execute(() -> { -// log.info("i am dynamic-tp-test-1 task"); -// }); -// dtpExecutor2.execute(NamedRunnable.of(() -> { -// try { -// Thread.sleep(1000); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// log.info("i am dynamic-tp-test-2 task"); -// }, "task-" + i)); -// } -// } -//} +package com.dtp.example.controller; + +import com.dtp.core.DtpRegistry; +import com.dtp.core.support.runnable.NamedRunnable; +import com.dtp.core.thread.DtpExecutor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author Redick01 + */ +@Slf4j +@RestController +@SuppressWarnings("all") +public class TestController { + + @Resource + private ThreadPoolExecutor dtpExecutor1; + + @GetMapping("/dtp-nacos-example/test") + public String test() throws InterruptedException { + task(); + return "success"; + } + + public void task() throws InterruptedException { + DtpExecutor dtpExecutor2 = DtpRegistry.getDtpExecutor("dtpExecutor2"); + for (int i = 0; i < 100; i++) { + Thread.sleep(100); + dtpExecutor1.execute(() -> { + log.info("i am dynamic-tp-test-1 task"); + }); + dtpExecutor2.execute(NamedRunnable.of(() -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + log.info("i am dynamic-tp-test-2 task"); + }, "task-" + i)); + } + } +} -- Gitee