diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
deleted file mode 100644
index a19a75ba2b2f4179557ea9bc337185df2f7498b2..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-name: BUG 报告
-about: 'Report a bug'
-title: 'bug'
-labels: 'bug'
----
-
-**首先感谢您使用 DynamicTp,如果使用过程中有任何问题,请按照下述模板反馈问题,建议使用 Markdown 语法**。
-
-### 版本信息
-
-- Jdk版本:
-- SpringBoot版本:
-- DynamicTp版本:
-- 配置中心版本:
-
-### 问题描述
-
-文字描述、截图、粘代码方式
-
-- 配置文件:
-- 代码使用步骤:
-- 报错信息:
-- 猜测可能原因:
-
-### 复现步骤
-
-1. xxx
-2. xxx
-
-### 其他信息
-
-1. xxx
-2. xxx
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 0000000000000000000000000000000000000000..68d67b0b71a2087eefe51f87710fa567d05fd2eb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,101 @@
+name: BUG 报告
+description: 'Report a bug'
+title: '[BUG]: '
+labels: ['bug']
+body:
+ - type: markdown
+ attributes:
+ value: |
+ **首先感谢您使用 DynamicTp,如果使用过程中有任何问题,请按照下述模板反馈问题,请使用 Markdown 语法**。
+
+ - type: dropdown
+ id: platform
+ attributes:
+ label: 平台
+ description: 您正在使用哪个平台?
+ options:
+ - Windows
+ - macOS
+ - Linux
+ validations:
+ required: true
+
+ - type: input
+ id: jdk-version
+ attributes:
+ label: Jdk版本
+ placeholder: 例如:JDK 8, JDK 11
+ description: 您正在使用哪个 JDK 版本?
+ validations:
+ required: true
+
+ - type: input
+ id: springboot-version
+ attributes:
+ label: SpringBoot版本
+ placeholder: 例如:2.6.3
+ description: 您正在使用哪个 SpringBoot 版本?
+ validations:
+ required: true
+
+ - type: input
+ id: dynamictp-version
+ attributes:
+ label: DynamicTp版本
+ placeholder: 例如:1.0.0
+ description: 您正在使用哪个 dynamic-tp 版本?
+ validations:
+ required: true
+
+ - type: input
+ id: config-center-type
+ attributes:
+ label: 配置中心类型
+ placeholder: 例如:Nacos, Apollo
+ description: 您正在使用哪个配置中心?
+ validations:
+ required: false
+
+ - type: input
+ id: config-center-version
+ attributes:
+ label: 配置中心版本
+ placeholder: 例如:2.0.0
+ description: 您正在使用哪个配置中心版本?
+ validations:
+ required: false
+
+ - type: textarea
+ id: problem-description
+ attributes:
+ label: 问题描述
+ description: 文字描述、截图、粘代码方式
+ placeholder: |
+ 文字描述、截图、粘代码方式
+
+ - 配置文件:
+ - 引入的依赖:
+ - 代码使用步骤:
+ - 报错信息:
+ - 猜测可能原因:
+ validations:
+ required: true
+
+ - type: textarea
+ id: reproduction-steps
+ attributes:
+ label: 复现步骤
+ description: 请详细描述如何复现此问题
+ placeholder: |
+ 1. xxx
+ 2. xxx
+ validations:
+ required: true
+
+ - type: textarea
+ id: additional-info
+ attributes:
+ label: 其他信息
+ description: 其他有助于解决问题的信息
+ validations:
+ required: false
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
deleted file mode 100644
index 3fb7f7ef3679f4085994fd884ff17e6250dee03c..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: idea 建议
-about: Suggest an idea
-title: 'feature'
-labels: 'feature'
----
-
-**首先感谢您使用 DynamicTp,如果对项目有好的想法建议,请按照下述模板提议讨论,建议使用 Markdown 语法**。
-
-### 方案描述
-
-### 应用场景
-
-### 难度风险
-
-### 外部依赖
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b67c3e095cd3215ca83ff24e6b10c030fd440ef6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,45 @@
+name: idea 建议
+description: 'Suggest an idea'
+title: '[FEATURE]: '
+labels: ['feature']
+body:
+ - type: markdown
+ attributes:
+ value: |
+ **首先感谢您使用 DynamicTp,如果对项目有好的想法建议,请按照下述模板提议讨论,请使用 Markdown 语法**。
+
+ - type: textarea
+ id: solution-description
+ attributes:
+ label: 方案描述
+ description: 请详细描述您的建议方案
+ placeholder: 详细描述您的建议方案...
+ validations:
+ required: true
+
+ - type: textarea
+ id: application-scenario
+ attributes:
+ label: 应用场景
+ description: 此功能适用的场景
+ placeholder: 描述此功能适用的场景...
+ validations:
+ required: true
+
+ - type: textarea
+ id: difficulty-risk
+ attributes:
+ label: 难度风险
+ description: 实现此功能可能的难度和风险
+ placeholder: 描述实现此功能可能的难度和风险...
+ validations:
+ required: true
+
+ - type: textarea
+ id: external-dependencies
+ attributes:
+ label: 外部依赖
+ description: 实现此功能需要的外部依赖
+ placeholder: 描述实现此功能需要的外部依赖...
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/question-ask.md b/.github/ISSUE_TEMPLATE/question-ask.md
deleted file mode 100644
index 0276cd1f81a3122f83e701cb263412831c5690c3..0000000000000000000000000000000000000000
--- a/.github/ISSUE_TEMPLATE/question-ask.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-name: 疑问解答
-about: Ask a question
-title: 'question'
-labels: 'question'
----
-
-**首先感谢您使用 DynamicTp,如果对项目有任何疑问需要解答,请按照下述模板提问,建议使用 Markdown 语法**。
-
-### 使用方面
-
-### 原理方面
-
-### 其他
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/question-ask.yml b/.github/ISSUE_TEMPLATE/question-ask.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9853840a5305e843c4a16caf3179ad10e8792b44
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question-ask.yml
@@ -0,0 +1,36 @@
+name: 疑问解答
+description: 'Ask a question'
+title: '[QUESTION]: '
+labels: ['question']
+body:
+ - type: markdown
+ attributes:
+ value: |
+ **首先感谢您使用 DynamicTp,如果对项目有任何疑问需要解答,请按照下述模板提问,请使用 Markdown 语法**。
+
+ - type: textarea
+ id: usage-questions
+ attributes:
+ label: 使用方面
+ description: 关于项目使用方面的疑问
+ placeholder: 描述您关于项目使用方面的疑问...
+ validations:
+ required: false
+
+ - type: textarea
+ id: principle-questions
+ attributes:
+ label: 原理方面
+ description: 关于项目原理方面的疑问
+ placeholder: 描述您关于项目原理方面的疑问...
+ validations:
+ required: false
+
+ - type: textarea
+ id: other-questions
+ attributes:
+ label: 其他
+ description: 其他方面的疑问
+ placeholder: 描述您的其他方面疑问...
+ validations:
+ required: false
diff --git a/.github/checkstyle/checkstyle.xml b/.github/checkstyle/checkstyle.xml
index 643c0d45e7af934e581aceea7ecd1d45b1999e70..02fb3f26ea14405995c237123734fc919846e3c1 100644
--- a/.github/checkstyle/checkstyle.xml
+++ b/.github/checkstyle/checkstyle.xml
@@ -166,7 +166,7 @@
-
+
diff --git a/.github/checkstyle/suppressions.xml b/.github/checkstyle/suppressions.xml
index 3abaf0c3e01c480501f2b9ed40d3be7f64374824..05d5431c50c0d6ee251fa0e58842bcf1b27e47e3 100644
--- a/.github/checkstyle/suppressions.xml
+++ b/.github/checkstyle/suppressions.xml
@@ -6,5 +6,6 @@
+
diff --git a/.github/workflows/build-jvmti.yml b/.github/workflows/build-jvmti.yml
index 1f19e0fc3166c7d63764406b67b15e9968ca0a44..a53234eaac87c5f54cbd7bcb302b60dee3ba0f76 100644
--- a/.github/workflows/build-jvmti.yml
+++ b/.github/workflows/build-jvmti.yml
@@ -4,7 +4,7 @@ on: [push]
jobs:
linux:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
@@ -16,9 +16,9 @@ jobs:
run: |
cd ${{ github.workspace }}/jvmti/jvmti-build
mvn package
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
- name: lib
+ name: lib-linux
path: jvmti/jvmti-build/target/classes/lib*
if-no-files-found: error
@@ -26,18 +26,18 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- - name: Set up JDK 8
+ - name: Set up JDK 17
uses: actions/setup-java@v3
with:
- java-version: '8'
+ java-version: '17'
distribution: 'adopt'
- name: Build with Maven
run: |
cd ${{ github.workspace }}/jvmti/jvmti-build
mvn package
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
- name: lib
+ name: lib-macos
path: jvmti/jvmti-build/target/classes/lib*
if-no-files-found: error
@@ -54,8 +54,8 @@ jobs:
run: |
cd ${{ github.workspace }}/jvmti/jvmti-build
mvn package
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
- name: lib
+ name: lib-windows
path: jvmti/jvmti-build/target/classes/*.dll
if-no-files-found: error
diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml
index 3a4a4a09f2faf00a972eb0b8d0d79005e5586126..53dc3607b40ce18f9077b146d81f994177b7bbd8 100644
--- a/.github/workflows/maven-build.yml
+++ b/.github/workflows/maven-build.yml
@@ -1,11 +1,3 @@
-# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
-# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
-
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
name: Java CI with Maven
on:
@@ -16,16 +8,15 @@ on:
jobs:
build:
-
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - name: Set up JDK 8
- uses: actions/setup-java@v3
- with:
- java-version: '8'
- distribution: 'temurin'
- cache: maven
- - name: Build with Maven
- run: mvn -B package --file pom.xml
+ - uses: actions/checkout@v3
+ - name: Set up JDK 8
+ uses: actions/setup-java@v3
+ with:
+ java-version: '8'
+ distribution: 'temurin'
+ cache: maven
+ - name: Build with Maven
+ run: mvn -B package --file pom.xml -DskipThrift=true
\ No newline at end of file
diff --git a/README.md b/README.md
index dd33ca52085e618f059503d1086bd44ae8f78b22..b87706996258ae215105de36b81e15579224883a 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,8 @@
+
-
@@ -20,7 +20,7 @@
---
-## 使用痛点
+## 痛点
使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?
@@ -84,29 +84,29 @@ protected void afterExecute(Runnable r, Throwable t);
>
> 4. 集成常用三方中间件内部线程池管理
-**经过多个版本的迭代,目前最新版本 v1.1.7 具有以下特性** ✅
+**经过多个版本的迭代,目前最新版本 v1.2.1 具有以下特性** ✅
- **代码零侵入**:我们改变了线程池以往的使用姿势,所有配置均放在配置中心,服务启动时会从配置中心拉取配置生成线程池对象放到 Spring 容器中,使用时直接从 Spring 容器中获取,对业务代码零侵入
+- **轻量简单**:使用起来极其简单,引入相应依赖,接入只需简单 4 步就可完成,顺利 3 分钟搞定,相当丝滑
+
- **通知告警**:提供多种通知告警维度(配置变更通知、活性报警、队列容量阈值报警、拒绝触发报警、任务执行或等待超时报警),触发配置阈值实时推送告警信息,已支持企微、钉钉、飞书、邮件、云之家报警,同时提供 SPI 接口可自定义扩展实现
-- **运行监控**:定时采集线程池指标数据(20 多种指标,包含线程池维度、队列维度、任务维度、tps、tp99等),支持通过 MicroMeter、JsonLog 两种方式,也可以通过 SpringBoot Endpoint 端点实时获取最新指标数据,同时提供 SPI 接口可自定义扩展实现
+- **运行监控**:定时采集线程池指标数据(20 多种指标,包含线程池维度、队列维度、任务维度、tps、tpxx 等),支持通过 MicroMeter、JsonLog、JMX 三种方式定时获取,也可以通过 SpringBoot Endpoint 端点实时获取最新指标数据,同时提供 SPI 接口可自定义扩展实现
- **任务增强**:提供任务包装功能(比 Spring 线程池任务包装更强大),实现 TaskWrapper 接口即可,如 MdcTaskWrapper、TtlTaskWrapper、SwTraceTaskWrapper、OpenTelemetryWrapper,可以支持线程池上下文信息传递
- **多配置中心支持**:支持多种主流配置中心,包括 Nacos、Apollo、Zookeeper、Consul、Etcd、Polaris、ServiceComb,同时也提供 SPI 接口可自定义扩展实现
-- **中间件线程池管理**:集成管理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc、RabbitMq 等组件的线程池管理(调参、监控报警)
-
-- **轻量简单**:使用起来极其简单,引入相应依赖,接入只需简单 4 步就可完成,顺利 3 分钟搞定,相当丝滑
+- **中间件线程池管理**:集成管理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc、RabbitMq、Liteflow 等组件的线程池管理(动态调参、监控、报警)
- **多模式**:提供了增强线程池 DtpExecutor,IO 密集型场景使用的线程池 EagerDtpExecutor,调度线程池 ScheduledDtpExecutor,有序线程池 OrderedDtpExecutor,可以根据业务场景选择合适的线程池
-- **兼容性**:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架管理,@Bean 定义时加 @DynamicTp 注解即可
+- **兼容性**:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架管理,只需@Bean 定义时加 @DynamicTp 注解即可
- **可靠性**:依靠 Spring 生命周期管理,可以做到优雅关闭线程池,在 Spring 容器关闭前尽可能多的处理队列中的任务
-- **高可扩展**:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)
+- **高可扩展**:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装、拒绝策略等等)
- **线上大规模应用**:参考[美团线程池实践](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html),美团内部已经有该理论成熟的应用经验
@@ -182,15 +182,25 @@ protected void afterExecute(Runnable r, Throwable t);
---
+## 知识星球
+
+
+
+
+
+---
+
## Star History
[](https://star-history.com/#dromara/dynamic-tp&Date)
---
-## 知识星球
+## 代码托管
-
+- github: https://github.com/dromara/dynamic-tp
+- gitee: https://gitee.com/dromara/dynamic-tp
+- gitcode: https://gitcode.com/dromara/dynamic-tp
---
@@ -198,9 +208,9 @@ protected void afterExecute(Runnable r, Throwable t);
看到这儿,**请给项目一个 star**,你的支持是我们前进的动力!
-使用过程中有任何问题,或者对项目有什么想法或者建议,可以加入社群,跟 1000+ 群友一起交流讨论。
+使用过程中有任何问题,或者对项目有什么想法或者建议,可以加入社群,跟 1500+ 群友一起交流讨论。
-微信群已满 200 人,可以关注微信公众号,加我个人微信拉群(备注:dynamic-tp)。
+微信群均已满 200 人,可以关注微信公众号,加我个人微信拉群(备注:dynamic-tp 拉群)。

@@ -214,13 +224,6 @@ protected void afterExecute(Runnable r, Throwable t);
---
-## 特别赞助
-
-**JNPF低代码开发平台**
-
-
-
----
## 鸣谢
感谢 JetBrains 对开源项目的支持
diff --git a/adapter/adapter-brpc/pom.xml b/adapter/adapter-brpc/pom.xml
index 747ecbbd04aa716b927e65cdd4a88ca5f143f796..7c3c8511226f2eac2ae2f2c9aa9ccc969733530a 100644
--- a/adapter/adapter-brpc/pom.xml
+++ b/adapter/adapter-brpc/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-adapter-brpc
diff --git a/adapter/adapter-common/pom.xml b/adapter/adapter-common/pom.xml
index ed664817c7b532c58867a009d2a0370d3fbc1ec3..d9fbed85373c4e30e4be99d85762a6e2ae213df1 100644
--- a/adapter/adapter-common/pom.xml
+++ b/adapter/adapter-common/pom.xml
@@ -5,9 +5,8 @@
org.dromara.dynamictp
dynamic-tp-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-adapter-common
-
diff --git a/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/AbstractDtpAdapter.java b/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/AbstractDtpAdapter.java
index a506fc4120bf50815fb49d5860e006d89dc71bf2..9fe5d66561e20a890d89044e9a6163b18ceb0630 100644
--- a/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/AbstractDtpAdapter.java
+++ b/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/AbstractDtpAdapter.java
@@ -22,6 +22,7 @@ import com.github.dadiyang.equator.FieldInfo;
import com.github.dadiyang.equator.GetterBaseEquator;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.eventbus.Subscribe;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.collections4.CollectionUtils;
@@ -31,21 +32,22 @@ import org.dromara.dynamictp.common.entity.NotifyPlatform;
import org.dromara.dynamictp.common.entity.ThreadPoolStats;
import org.dromara.dynamictp.common.entity.TpExecutorProps;
import org.dromara.dynamictp.common.entity.TpMainFields;
+import org.dromara.dynamictp.common.event.CustomContextRefreshedEvent;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
+import org.dromara.dynamictp.common.manager.EventBusManager;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
-import org.dromara.dynamictp.common.spring.OnceApplicationContextEventListener;
import org.dromara.dynamictp.common.util.ReflectionUtil;
import org.dromara.dynamictp.common.util.StreamUtil;
import org.dromara.dynamictp.core.aware.AwareManager;
import org.dromara.dynamictp.core.converter.ExecutorConverter;
import org.dromara.dynamictp.core.notifier.manager.NoticeManager;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
import org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper;
import org.dromara.dynamictp.core.support.task.wrapper.TaskWrappers;
-import org.springframework.context.event.ContextRefreshedEvent;
+import java.lang.reflect.Field;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -67,20 +69,24 @@ import static org.dromara.dynamictp.core.support.DtpLifecycleSupport.shutdownGra
* @since 1.0.6
*/
@Slf4j
-public abstract class AbstractDtpAdapter extends OnceApplicationContextEventListener implements DtpAdapter {
+public abstract class AbstractDtpAdapter implements DtpAdapter {
private static final Equator EQUATOR = new GetterBaseEquator();
protected final Map executors = Maps.newHashMap();
- @Override
- protected void onContextRefreshedEvent(ContextRefreshedEvent event) {
+ protected AbstractDtpAdapter() {
+ EventBusManager.register(this);
+ }
+
+ @Subscribe
+ public synchronized void onContextRefreshedEvent(CustomContextRefreshedEvent event) {
try {
- DtpProperties dtpProperties = ApplicationContextHolder.getBean(DtpProperties.class);
+ DtpProperties dtpProperties = ContextManagerHelper.getBean(DtpProperties.class);
initialize();
afterInitialize();
refresh(dtpProperties);
- log.info("DynamicTp adapter, {} init end, executors: {}", getTpPrefix(), executors);
+ log.info("DynamicTp adapter, {} init end, executors {}", getTpPrefix(), executors.keySet());
} catch (Throwable e) {
log.error("DynamicTp adapter, {} init failed.", getTpPrefix(), e);
}
@@ -163,14 +169,25 @@ public abstract class AbstractDtpAdapter extends OnceApplicationContextEventList
protected void enhanceOriginExecutor(String tpName, ThreadPoolExecutor executor, String fieldName, Object targetObj) {
ThreadPoolExecutorProxy proxy = new ThreadPoolExecutorProxy(executor);
- try {
- ReflectionUtil.setFieldValue(fieldName, targetObj, proxy);
+ boolean r = ReflectionUtil.setFieldValue(fieldName, targetObj, proxy);
+ if (r) {
+ putAndFinalize(tpName, executor, proxy);
+ }
+ }
+
+ protected void enhanceOriginExecutor(String tpName, ThreadPoolExecutor executor, Field field, Object targetObj) {
+ ThreadPoolExecutorProxy proxy = new ThreadPoolExecutorProxy(executor);
+ boolean r = ReflectionUtil.setFieldValue(field, targetObj, proxy);
+ if (r) {
putAndFinalize(tpName, executor, proxy);
- } catch (IllegalAccessException e) {
- log.error("DynamicTp adapter, enhance {} failed.", tpName, e);
}
}
+ protected void enhanceOriginExecutorWithoutFinalize(String tpName, ThreadPoolExecutorProxy proxy, String fieldName, Object targetObj) {
+ ReflectionUtil.setFieldValue(fieldName, targetObj, proxy);
+ executors.put(tpName, new ExecutorWrapper(tpName, proxy));
+ }
+
protected void putAndFinalize(String tpName, ExecutorService origin, Executor targetForWrapper) {
executors.put(tpName, new ExecutorWrapper(tpName, targetForWrapper));
shutdownOriginalExecutor(origin);
@@ -220,3 +237,4 @@ public abstract class AbstractDtpAdapter extends OnceApplicationContextEventList
}
}
}
+
diff --git a/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/DtpAdapterListener.java b/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/DtpAdapterListener.java
index fd60efd4fd2de5d79abb69e2778936b5b45af34b..d50fc968091d3ada573f40ce021b7c2fbfa104d4 100644
--- a/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/DtpAdapterListener.java
+++ b/adapter/adapter-common/src/main/java/org/dromara/dynamictp/adapter/common/DtpAdapterListener.java
@@ -17,23 +17,22 @@
package org.dromara.dynamictp.adapter.common;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
+import com.google.common.eventbus.Subscribe;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.apache.commons.collections4.MapUtils;
import org.dromara.dynamictp.common.event.AlarmCheckEvent;
import org.dromara.dynamictp.common.event.CollectEvent;
import org.dromara.dynamictp.common.event.RefreshEvent;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
+import org.dromara.dynamictp.common.manager.EventBusManager;
+import org.dromara.dynamictp.common.notifier.type.NotifyItemTypeRegistry;
import org.dromara.dynamictp.common.properties.DtpProperties;
import org.dromara.dynamictp.core.handler.CollectorHandler;
import org.dromara.dynamictp.core.notifier.manager.AlarmManager;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.springframework.context.ApplicationEvent;
-import org.springframework.context.event.GenericApplicationListener;
-import org.springframework.core.ResolvableType;
-import org.springframework.lang.NonNull;
-import org.springframework.lang.Nullable;
-import org.springframework.util.CollectionUtils;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.SCHEDULE_NOTIFY_ITEMS;
+import java.util.EventObject;
+
/**
* DtpAdapterListener related
@@ -42,62 +41,37 @@ import static org.dromara.dynamictp.common.constant.DynamicTpConst.SCHEDULE_NOTI
* @since 1.0.6
*/
@Slf4j
-public class DtpAdapterListener implements GenericApplicationListener {
+public class DtpAdapterListener {
- @Override
- public boolean supportsEventType(ResolvableType resolvableType) {
- Class> type = resolvableType.getRawClass();
- if (type != null) {
- return RefreshEvent.class.isAssignableFrom(type)
- || CollectEvent.class.isAssignableFrom(type)
- || AlarmCheckEvent.class.isAssignableFrom(type);
- }
- return false;
+ public DtpAdapterListener() {
+ EventBusManager.register(this);
}
- @Override
- public void onApplicationEvent(@NonNull ApplicationEvent event) {
+ @Subscribe
+ public void handleDtpEvent(EventObject event) {
try {
if (event instanceof RefreshEvent) {
- doRefresh(((RefreshEvent) event).getDtpProperties());
+ RefreshEvent refreshEvent = (RefreshEvent) event;
+ doRefresh(refreshEvent.getDtpProperties());
} else if (event instanceof CollectEvent) {
- doCollect(((CollectEvent) event).getDtpProperties());
+ CollectEvent collectEvent = (CollectEvent) event;
+ doCollect(collectEvent.getDtpProperties());
} else if (event instanceof AlarmCheckEvent) {
- doAlarmCheck(((AlarmCheckEvent) event).getDtpProperties());
+ AlarmCheckEvent alarmCheckEvent = (AlarmCheckEvent) event;
+ doAlarmCheck(alarmCheckEvent.getDtpProperties());
}
} catch (Exception e) {
log.error("DynamicTp adapter, event handle failed.", e);
}
}
- /**
- * Compatible with lower versions of spring.
- *
- * @param sourceType sourceType
- * @return true if support
- */
- @Override
- public boolean supportsSourceType(@Nullable Class> sourceType) {
- return true;
- }
-
- /**
- * Compatible with lower versions of spring.
- *
- * @return order
- */
- @Override
- public int getOrder() {
- return LOWEST_PRECEDENCE;
- }
-
/**
* Do collect thread pool stats.
* @param dtpProperties dtpProperties
*/
protected void doCollect(DtpProperties dtpProperties) {
- val handlerMap = ApplicationContextHolder.getBeansOfType(DtpAdapter.class);
- if (CollectionUtils.isEmpty(handlerMap)) {
+ val handlerMap = ContextManagerHelper.getBeansOfType(DtpAdapter.class);
+ if (MapUtils.isEmpty(handlerMap)) {
return;
}
handlerMap.forEach((k, v) -> v.getMultiPoolStats().forEach(ps ->
@@ -109,8 +83,8 @@ public class DtpAdapterListener implements GenericApplicationListener {
* @param dtpProperties dtpProperties
*/
protected void doRefresh(DtpProperties dtpProperties) {
- val handlerMap = ApplicationContextHolder.getBeansOfType(DtpAdapter.class);
- if (CollectionUtils.isEmpty(handlerMap)) {
+ val handlerMap = ContextManagerHelper.getBeansOfType(DtpAdapter.class);
+ if (MapUtils.isEmpty(handlerMap)) {
return;
}
handlerMap.forEach((k, v) -> v.refresh(dtpProperties));
@@ -121,13 +95,13 @@ public class DtpAdapterListener implements GenericApplicationListener {
* @param dtpProperties dtpProperties
*/
protected void doAlarmCheck(DtpProperties dtpProperties) {
- val handlerMap = ApplicationContextHolder.getBeansOfType(DtpAdapter.class);
- if (CollectionUtils.isEmpty(handlerMap)) {
+ val handlerMap = ContextManagerHelper.getBeansOfType(DtpAdapter.class);
+ if (MapUtils.isEmpty(handlerMap)) {
return;
}
handlerMap.forEach((k, v) -> {
val executorWrapper = v.getExecutorWrappers();
- executorWrapper.forEach((kk, vv) -> AlarmManager.tryAlarmAsync(vv, SCHEDULE_NOTIFY_ITEMS));
+ executorWrapper.forEach((kk, vv) -> AlarmManager.checkAndTryAlarmAsync(vv, NotifyItemTypeRegistry.getScheduleNotifyTypes()));
});
}
}
diff --git a/adapter/adapter-dubbo/pom.xml b/adapter/adapter-dubbo/pom.xml
index 3a85b9b0027bb2d9be8888604e0de3c1a814e829..c6d23f3618fab78bff4e5dcffc7f1222dd044158 100644
--- a/adapter/adapter-dubbo/pom.xml
+++ b/adapter/adapter-dubbo/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-adapter-dubbo
diff --git a/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/alibaba/AlibabaDubboDtpAdapter.java b/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/alibaba/AlibabaDubboDtpAdapter.java
index b412f2c5466ef28161cf8a8ba99445ada6439852..f8011c17565620dfdf5a82b9b2ad715aaa584208 100644
--- a/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/alibaba/AlibabaDubboDtpAdapter.java
+++ b/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/alibaba/AlibabaDubboDtpAdapter.java
@@ -20,11 +20,14 @@ package org.dromara.dynamictp.adapter.dubbo.alibaba;
import com.alibaba.dubbo.common.extension.ExtensionLoader;
import com.alibaba.dubbo.common.store.DataStore;
import com.alibaba.dubbo.remoting.transport.dispatcher.WrappedChannelHandler;
+import com.google.common.eventbus.Subscribe;
+import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.dynamictp.adapter.common.AbstractDtpAdapter;
+import org.dromara.dynamictp.common.event.CustomContextRefreshedEvent;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
import org.dromara.dynamictp.jvmti.JVMTI;
import org.springframework.beans.factory.InitializingBean;
@@ -42,6 +45,7 @@ import static com.alibaba.dubbo.common.Constants.EXECUTOR_SERVICE_COMPONENT_KEY;
* @since 1.0.6
*/
@SuppressWarnings("all")
+@Slf4j
public class AlibabaDubboDtpAdapter extends AbstractDtpAdapter implements InitializingBean {
private static final String TP_PREFIX = "dubboTp";
@@ -50,18 +54,27 @@ public class AlibabaDubboDtpAdapter extends AbstractDtpAdapter implements Initia
private final AtomicBoolean registered = new AtomicBoolean(false);
+ @Subscribe
+ @Override
+ public synchronized void onContextRefreshedEvent(CustomContextRefreshedEvent event) {
+ // do nothing, initialize in afterPropertiesSet
+ }
+
@Override
public void afterPropertiesSet() throws Exception {
- //从ApplicationReadyEvent改为ContextRefreshedEvent后,
- //启动时无法dubbo获取线程池,这里直接每隔1s轮循,直至成功初始化线程池
+
+ // 从ApplicationReadyEvent改为ContextRefreshedEvent后,
+ // 启动时无法dubbo获取线程池,这里直接每隔1s轮循,直至成功初始化线程池
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
while (!registered.get()) {
try {
Thread.sleep(1000);
- DtpProperties dtpProperties = ApplicationContextHolder.getBean(DtpProperties.class);
- this.initialize();
- this.refresh(dtpProperties);
+ DtpProperties dtpProperties = ContextManagerHelper.getBean(DtpProperties.class);
+ initialize();
+ afterInitialize();
+ refresh(dtpProperties);
+ log.info("DynamicTp adapter, {} init end, executors {}", getTpPrefix(), executors.keySet());
} catch (Throwable e) { }
}
});
diff --git a/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java b/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java
index 77e49980b17a6edc618bca8a42fe69b8f9d39c94..69b1752f6668bf6ea33753ef04e07211f83d2ed7 100644
--- a/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java
+++ b/adapter/adapter-dubbo/src/main/java/org/dromara/dynamictp/adapter/dubbo/apache/ApacheDubboDtpAdapter.java
@@ -17,6 +17,7 @@
package org.dromara.dynamictp.adapter.dubbo.apache;
+import com.google.common.eventbus.Subscribe;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.collections4.CollectionUtils;
@@ -32,12 +33,14 @@ import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
import org.apache.dubbo.remoting.transport.dispatcher.WrappedChannelHandler;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.dromara.dynamictp.adapter.common.AbstractDtpAdapter;
+import org.dromara.dynamictp.common.event.CustomContextRefreshedEvent;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
import org.dromara.dynamictp.common.util.ReflectionUtil;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
import org.dromara.dynamictp.jvmti.JVMTI;
import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
import java.util.Map;
import java.util.Objects;
@@ -57,21 +60,31 @@ import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;
*/
@Slf4j
@SuppressWarnings("all")
-public class ApacheDubboDtpAdapter extends AbstractDtpAdapter {
+public class ApacheDubboDtpAdapter extends AbstractDtpAdapter implements ApplicationListener {
private static final String TP_PREFIX = "dubboTp";
private static final String EXECUTOR_SERVICE_COMPONENT_KEY = ExecutorService.class.getName();
+ private static final String INTERNAL_EXECUTOR_SERVICE_COMPONENT_KEY = "INTERNAL_SERVICE_EXECUTOR";
+
private static final String EXECUTOR_FIELD = "executor";
+ @Subscribe
+ @Override
+ public synchronized void onContextRefreshedEvent(CustomContextRefreshedEvent event) {
+ // do nothing, initialize in onApplicationEvent
+ }
+
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ServiceBeanExportedEvent) {
try {
- DtpProperties dtpProperties = ApplicationContextHolder.getBean(DtpProperties.class);
+ DtpProperties dtpProperties = ContextManagerHelper.getBean(DtpProperties.class);
initialize();
+ afterInitialize();
refresh(dtpProperties);
+ log.info("DynamicTp adapter, {} init end, executors {}", getTpPrefix(), executors.keySet());
} catch (Exception e) {
log.error("DynamicTp adapter, {} init failed.", getTpPrefix(), e);
}
@@ -93,31 +106,7 @@ public class ApacheDubboDtpAdapter extends AbstractDtpAdapter {
super.initialize();
String currVersion = Version.getVersion();
if (DubboVersion.compare(DubboVersion.VERSION_2_7_5, currVersion) > 0) {
- // 当前dubbo版本 < 2.7.5
- val handlers = JVMTI.getInstances(WrappedChannelHandler.class);
- if (CollectionUtils.isEmpty(handlers)) {
- return;
- }
- DataStore dataStore = ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension();
- handlers.forEach(handler -> {
- //获取WrappedChannelHandler中的原始线程池
- val originExecutor = ReflectionUtil.getFieldValue(EXECUTOR_FIELD, handler);
- if (!(originExecutor instanceof ExecutorService)) {
- return;
- }
- URL url = handler.getUrl();
- //低版本跳过消费者线程池配置
- if (!CONSUMER_SIDE.equalsIgnoreCase(url.getParameter(SIDE_KEY))) {
- String port = String.valueOf(url.getPort());
- String tpName = genTpName(port);
- //增强原始线程池,替换为动态线程池代理
- enhanceOriginExecutor(tpName, (ThreadPoolExecutor) originExecutor, EXECUTOR_FIELD, handler);
- //获取增强后的新动态线程池
- Object newExexutor = ReflectionUtil.getFieldValue(EXECUTOR_FIELD, handler);
- //替换dataStore中的线程池
- dataStore.put(EXECUTOR_SERVICE_COMPONENT_KEY, port, newExexutor);
- }
- });
+ handleLessThanV275();
return;
}
@@ -131,12 +120,16 @@ public class ApacheDubboDtpAdapter extends AbstractDtpAdapter {
}
val data = (ConcurrentMap>) ReflectionUtil.getFieldValue(
- DefaultExecutorRepository.class, "data", executorRepository);
+ DefaultExecutorRepository.class, "data", executorRepository);
if (Objects.isNull(data)) {
return;
}
- Map
+
+ 静默时长: s
- 报警间隔: s
+ trace 信息:
扩展信息:
diff --git a/extension/extension-notify-yunzhijia/pom.xml b/extension/extension-notify-yunzhijia/pom.xml
index 6c4efdef779b48e8ddc1b0dfad1dfe8e5a93b6d9..e212e0e884bdc0847f1437396469379845861059 100644
--- a/extension/extension-notify-yunzhijia/pom.xml
+++ b/extension/extension-notify-yunzhijia/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-extension
- ${revision}
+ 1.2.1
../pom.xml
diff --git a/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/DtpYunZhiJiaNotifier.java b/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/DtpYunZhiJiaNotifier.java
index 525835d9944bebb242ef6fc25c75cef750216951..fa6ce1da20fbd48d8d6a330f376b81de2baf1b06 100644
--- a/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/DtpYunZhiJiaNotifier.java
+++ b/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/DtpYunZhiJiaNotifier.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.extension.notify.yunzhijia;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
import org.dromara.dynamictp.core.notifier.AbstractDtpNotifier;
/**
@@ -33,7 +33,7 @@ import org.dromara.dynamictp.core.notifier.AbstractDtpNotifier;
public class DtpYunZhiJiaNotifier extends AbstractDtpNotifier {
public DtpYunZhiJiaNotifier() {
- super(ApplicationContextHolder.getBean(YunZhiJiaNotifier.class));
+ super(ContextManagerHelper.getBean(YunZhiJiaNotifier.class));
}
@Override
diff --git a/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/YunZhiJiaNotifyConst.java b/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/YunZhiJiaNotifyConst.java
index c3d957fc7d343fb8b15f79392f3358383b29c6a5..280c1dbf3a99cadf23427e24687cba5c5ae1fe01 100644
--- a/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/YunZhiJiaNotifyConst.java
+++ b/extension/extension-notify-yunzhijia/src/main/java/org/dromara/dynamictp/extension/notify/yunzhijia/YunZhiJiaNotifyConst.java
@@ -69,8 +69,9 @@ public final class YunZhiJiaNotifyConst {
"上次报警时间:%s \n" +
"报警时间:%s \n" +
"接收人:@%s \n" +
+ "统计周期:%ss \n" +
+ "静默时长:%ss \n" +
"trace 信息:%s \n" +
- "报警间隔:%ss \n" +
"扩展信息:%s \n";
public static final String CHANGE_NOTICE_TEMPLATE =
diff --git a/extension/extension-opentelemetry/pom.xml b/extension/extension-opentelemetry/pom.xml
index c3f1816914472186715bf623108f41f2661c8c67..4434404992ea4bc66cae0134f9b2858334c2b529 100644
--- a/extension/extension-opentelemetry/pom.xml
+++ b/extension/extension-opentelemetry/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-extension
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-extension-opentelemetry
diff --git a/extension/extension-opentelemetry/src/main/java/org/dromara/dynamictp/extension/opentelemetry/wrapper/OpenTelemetryWrapper.java b/extension/extension-opentelemetry/src/main/java/org/dromara/dynamictp/extension/opentelemetry/wrapper/OpenTelemetryWrapper.java
index a7920005420e589151501920874490434924e9d6..a0619ce72fea94878cfef7f5a3ba3e88a82962a5 100644
--- a/extension/extension-opentelemetry/src/main/java/org/dromara/dynamictp/extension/opentelemetry/wrapper/OpenTelemetryWrapper.java
+++ b/extension/extension-opentelemetry/src/main/java/org/dromara/dynamictp/extension/opentelemetry/wrapper/OpenTelemetryWrapper.java
@@ -43,8 +43,7 @@ public class OpenTelemetryWrapper implements TaskWrapper {
@Override
public Runnable wrap(Runnable runnable) {
Context context = Context.current();
- //把Trace信息传入DynamicTP中
- MDC.put(TRACE_ID, Span.current().getSpanContext().getTraceId());
+ MDC.put(TRACE_ID, Span.current().getSpanContext().getTraceId());
// 被wrap方法包装后,该Executor执行的所有Runnable都会跑在特定的context中
return MdcRunnable.get(context.wrap(runnable));
}
diff --git a/extension/extension-skywalking/pom.xml b/extension/extension-skywalking/pom.xml
index 019485e9185aa7fb9e2044a89ca873c9d165fcfd..55bd65c9f15665b022e313f639496513e35be824 100644
--- a/extension/extension-skywalking/pom.xml
+++ b/extension/extension-skywalking/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-extension
- ${revision}
+ 1.2.1
../pom.xml
diff --git a/extension/pom.xml b/extension/pom.xml
index a2d20349dfc3917c555300777e54df6e26c8f01a..af0a847758a5dc5132848c16eadd1fbb70ac9432 100644
--- a/extension/pom.xml
+++ b/extension/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-extension
diff --git a/jvmti/jvmti-build/pom.xml b/jvmti/jvmti-build/pom.xml
index 33a70551ba07b7b9d9d6dea314b690142940a04c..6d432d880a9ae87f0bb5ce08cd825a3a9afe403f 100644
--- a/jvmti/jvmti-build/pom.xml
+++ b/jvmti/jvmti-build/pom.xml
@@ -4,7 +4,7 @@
org.dromara.dynamictp
dynamic-tp-jvmti
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-jvmti-build
diff --git a/jvmti/jvmti-runtime/pom.xml b/jvmti/jvmti-runtime/pom.xml
index d16ced4fd1da6b0e356852c6ad69659a66fc9d35..b332b4f245229db381c2d0edcbc3c3ab0a08a484 100644
--- a/jvmti/jvmti-runtime/pom.xml
+++ b/jvmti/jvmti-runtime/pom.xml
@@ -4,7 +4,7 @@
org.dromara.dynamictp
dynamic-tp-jvmti
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-jvmti-runtime
diff --git a/jvmti/pom.xml b/jvmti/pom.xml
index 5245ae3b462b273262d15165eaf59243134d637c..d5afd173354fe839e2e597621478e01550d10458 100644
--- a/jvmti/pom.xml
+++ b/jvmti/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-jvmti
@@ -17,4 +17,4 @@
jvmti-runtime
-
\ No newline at end of file
+
diff --git a/logging/pom.xml b/logging/pom.xml
index f2ac2b0426427f7a3fbc48330f76086adbe55a72..9962f17dea53fd97d08c4b9ca91ad65773d613db 100644
--- a/logging/pom.xml
+++ b/logging/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-logging
@@ -45,11 +45,5 @@
log4j-slf4j-impl
true
-
-
- org.springframework.cloud
- spring-cloud-context
- true
-
diff --git a/logging/src/main/java/org/dromara/dynamictp/logging/AbstractDtpLogging.java b/logging/src/main/java/org/dromara/dynamictp/logging/AbstractDtpLogging.java
index 6e24400cc7505dda6cb286c2aeb766a82c0e744b..a61f97fc32854c5ff8a8bad4c95c7d8795f67b09 100644
--- a/logging/src/main/java/org/dromara/dynamictp/logging/AbstractDtpLogging.java
+++ b/logging/src/main/java/org/dromara/dynamictp/logging/AbstractDtpLogging.java
@@ -17,10 +17,10 @@
package org.dromara.dynamictp.logging;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
-import org.dromara.dynamictp.common.properties.DtpProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
+import org.dromara.dynamictp.common.properties.DtpProperties;
import java.io.File;
import java.io.FileNotFoundException;
@@ -40,11 +40,10 @@ public abstract class AbstractDtpLogging {
protected static final String MONITOR_LOG_NAME = "DTP.MONITOR.LOG";
private static final String CLASSPATH_PREFIX = "classpath:";
private static final String LOGGING_PATH = "LOG.PATH";
- private static final String APP_NAME = "APP.NAME";
static {
try {
- DtpProperties dtpProperties = ApplicationContextHolder.getBean(DtpProperties.class);
+ DtpProperties dtpProperties = ContextManagerHelper.getBean(DtpProperties.class);
String logPath = dtpProperties.getLogPath();
if (StringUtils.isBlank(logPath)) {
String userHome = System.getProperty("user.home");
@@ -52,17 +51,12 @@ public abstract class AbstractDtpLogging {
} else {
System.setProperty(LOGGING_PATH, logPath);
}
-
- String appName = ApplicationContextHolder.getEnvironment().getProperty("spring.application.name");
- appName = StringUtils.isNotBlank(appName) ? appName : "application";
- System.setProperty(APP_NAME, appName);
} catch (Exception e) {
log.error("DynamicTp logging env init failed, if collectType is not logging, this error can be ignored.", e);
}
}
public URL getResourceUrl(String resource) throws IOException {
-
if (resource.startsWith(CLASSPATH_PREFIX)) {
String path = resource.substring(CLASSPATH_PREFIX.length());
ClassLoader classLoader = DtpLoggingInitializer.class.getClassLoader();
diff --git a/pom.xml b/pom.xml
index 10417debae6b759241cc14cc1d033b0e790a07f5..af49b25c5f43c543b30d87e45bba5aa64d188ec7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
pom
DynamicTp Project
@@ -13,7 +13,7 @@
https://github.com/yanhom1314/dynamic-tp
- 1.1.8-beta
+ 1.2.1
8
8
@@ -24,8 +24,7 @@
31.1-jre
4.4
- 1.3.0
- 3.1.0
+ 1.7.0
3.8.1
2.4
3.2.0
@@ -33,8 +32,7 @@
1.6.7
3.7.1
3.1.0
-
- 3.3.0
+ 0.6.0
@@ -43,11 +41,13 @@
common
starter
logging
- example
+
extension
jvmti
test
- dependencies
+
+ spring
+ benchmark
@@ -104,14 +104,6 @@
pom
import
-
-
- cglib
- cglib
- ${cglib.version}
- pom
- import
-
@@ -162,7 +154,7 @@
org.apache.maven.plugins
maven-checkstyle-plugin
- ${maven-checkstyle-plugin.verion}
+ ${maven-checkstyle-plugin.version}
.github/checkstyle/checkstyle.xml
false
@@ -207,6 +199,7 @@
+ attach-sources
package
jar-no-fork
@@ -221,7 +214,8 @@
${maven-javadoc-plugin.version}
- package
+ attach-javadocs
+ package
jar
@@ -229,20 +223,23 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- ${project.artifactId}
- ${project.version}
- ${maven.build.timestamp}
- yanhom
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -259,6 +256,17 @@
+
+
+
+
+
+
+
+
+
+
+
org.sonatype.plugins
nexus-staging-maven-plugin
@@ -283,31 +291,31 @@
-
- org.codehaus.mojo
- flatten-maven-plugin
- ${maven-flatten.version}
-
- true
- resolveCiFriendliesOnly
-
-
-
- flatten
- process-resources
-
- flatten
-
-
-
- flatten.clean
- clean
-
- clean
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/img/zsxq.jpg b/resources/img/zsxq.jpg
deleted file mode 100644
index dc2db149792ee5bc7d256e94818d6b3faa197703..0000000000000000000000000000000000000000
Binary files a/resources/img/zsxq.jpg and /dev/null differ
diff --git a/resources/img/zsxq.png b/resources/img/zsxq.png
new file mode 100644
index 0000000000000000000000000000000000000000..27a9a07612b847393d90dcafd861f98efd02cf60
Binary files /dev/null and b/resources/img/zsxq.png differ
diff --git a/spring/pom.xml b/spring/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a7c449fd7ae7b7f1b1e75d874bdc0e3cc490f8a
--- /dev/null
+++ b/spring/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-all
+ 1.2.1
+ ../pom.xml
+
+ dynamic-tp-spring
+
+
+
+ org.springframework
+ spring-context
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-core
+
+
+
+
diff --git a/spring/src/main/java/org/dromara/dynamictp/spring/AbstractSpringRefresher.java b/spring/src/main/java/org/dromara/dynamictp/spring/AbstractSpringRefresher.java
new file mode 100644
index 0000000000000000000000000000000000000000..15810bb5ddff233650a883ea96bc7cd72fbc078b
--- /dev/null
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/AbstractSpringRefresher.java
@@ -0,0 +1,46 @@
+/*
+ * 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.dromara.dynamictp.spring;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.dynamictp.common.properties.DtpProperties;
+import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.core.env.Environment;
+
+/**
+ * Abstract class for refreshing properties in a Spring environment.
+ *
+ * @author vzer200
+ * @since 1.2.0
+ */
+@Slf4j
+public abstract class AbstractSpringRefresher extends AbstractRefresher implements EnvironmentAware {
+
+ protected Environment environment;
+
+ protected AbstractSpringRefresher(DtpProperties dtpProperties) {
+ super(dtpProperties);
+ }
+
+ @Override
+ public void setEnvironment(Environment environment) {
+ this.environment = environment;
+ }
+
+}
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanConfiguration.java b/spring/src/main/java/org/dromara/dynamictp/spring/DtpBaseBeanConfiguration.java
similarity index 76%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanConfiguration.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/DtpBaseBeanConfiguration.java
index ee7441d4f2026fcfe0ae84f1b44f9d95982a7ce4..e3ea07088791cb9f038ec48cbeecd47628d81806 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanConfiguration.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/DtpBaseBeanConfiguration.java
@@ -15,12 +15,16 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring;
import org.dromara.dynamictp.common.properties.DtpProperties;
import org.dromara.dynamictp.core.DtpRegistry;
+import org.dromara.dynamictp.core.lifecycle.DtpLifecycle;
+import org.dromara.dynamictp.core.lifecycle.LifeCycleManagement;
import org.dromara.dynamictp.core.monitor.DtpMonitor;
import org.dromara.dynamictp.core.support.DtpBannerPrinter;
+import org.dromara.dynamictp.spring.lifecycle.DtpLifecycleSpringAdapter;
+import org.dromara.dynamictp.spring.listener.DtpApplicationListener;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -60,4 +64,14 @@ public class DtpBaseBeanConfiguration {
public DtpBannerPrinter dtpBannerPrinter() {
return new DtpBannerPrinter();
}
+
+ @Bean
+ public DtpLifecycleSpringAdapter dtpLifecycleSpringAdapter(LifeCycleManagement lifeCycleManagement) {
+ return new DtpLifecycleSpringAdapter(lifeCycleManagement);
+ }
+
+ @Bean
+ public DtpApplicationListener dtpApplicationListener() {
+ return new DtpApplicationListener();
+ }
}
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpPostProcessor.java b/spring/src/main/java/org/dromara/dynamictp/spring/DtpPostProcessor.java
similarity index 93%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/DtpPostProcessor.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/DtpPostProcessor.java
index 8496f1462769a38b3c4df88596776a731349240a..d2c28513771323ef68f233bc5042eed1ffada3d3 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpPostProcessor.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/DtpPostProcessor.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
@@ -30,9 +30,10 @@ import org.dromara.dynamictp.core.executor.eager.EagerDtpExecutor;
import org.dromara.dynamictp.core.executor.eager.TaskQueue;
import org.dromara.dynamictp.core.support.DynamicTp;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
-import org.dromara.dynamictp.core.support.ScheduledThreadPoolExecutorProxy;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ScheduledThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
import org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper;
+import org.dromara.dynamictp.core.support.task.wrapper.TaskWrappers;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
@@ -146,7 +147,7 @@ public class DtpPostProcessor implements BeanPostProcessor, BeanFactoryAware, Pr
val proxy = newProxy(poolName, poolTaskExecutor.getThreadPoolExecutor());
try {
ReflectionUtil.setFieldValue("threadPoolExecutor", bean, proxy);
- tryWrapTaskDecorator(poolTaskExecutor, proxy);
+ tryWrapTaskDecorator(poolName, poolTaskExecutor, proxy);
} catch (IllegalAccessException ignored) { }
DtpRegistry.registerExecutor(new ExecutorWrapper(poolName, proxy), REGISTER_SOURCE);
return bean;
@@ -183,7 +184,7 @@ public class DtpPostProcessor implements BeanPostProcessor, BeanFactoryAware, Pr
return proxy;
}
- private void tryWrapTaskDecorator(ThreadPoolTaskExecutor poolTaskExecutor, ThreadPoolExecutorProxy proxy) throws IllegalAccessException {
+ private void tryWrapTaskDecorator(String poolName, ThreadPoolTaskExecutor poolTaskExecutor, ThreadPoolExecutorProxy proxy) throws IllegalAccessException {
Object taskDecorator = ReflectionUtil.getFieldValue("taskDecorator", poolTaskExecutor);
if (Objects.isNull(taskDecorator)) {
return;
@@ -191,7 +192,7 @@ public class DtpPostProcessor implements BeanPostProcessor, BeanFactoryAware, Pr
TaskWrapper taskWrapper = (taskDecorator instanceof TaskWrapper) ? (TaskWrapper) taskDecorator : new TaskWrapper() {
@Override
public String name() {
- return taskDecorator.getClass().getName();
+ return poolName + "#taskDecorator";
}
@Override
@@ -200,5 +201,6 @@ public class DtpPostProcessor implements BeanPostProcessor, BeanFactoryAware, Pr
}
};
ReflectionUtil.setFieldValue("taskWrappers", proxy, Lists.newArrayList(taskWrapper));
+ TaskWrappers.getInstance().register(taskWrapper);
}
}
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanDefinitionRegistrar.java b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBaseBeanDefinitionRegistrar.java
similarity index 80%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanDefinitionRegistrar.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBaseBeanDefinitionRegistrar.java
index c0195330dc861ffe008cde4cef8e755a5497edc4..f62a75088d14a51201d6f20d4da93f51f6490394 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBaseBeanDefinitionRegistrar.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBaseBeanDefinitionRegistrar.java
@@ -15,13 +15,15 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring.annotation;
import com.google.common.collect.Lists;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
-import org.dromara.dynamictp.common.spring.SpringBeanHelper;
+
import org.dromara.dynamictp.common.timer.HashedWheelTimer;
import org.dromara.dynamictp.core.executor.NamedThreadFactory;
+import org.dromara.dynamictp.spring.DtpPostProcessor;
+import org.dromara.dynamictp.spring.holder.SpringContextHolder;
+import org.dromara.dynamictp.spring.util.BeanRegistrationUtil;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
@@ -45,10 +47,10 @@ public class DtpBaseBeanDefinitionRegistrar implements ImportBeanDefinitionRegis
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
registerHashedWheelTimer(registry);
- SpringBeanHelper.registerIfAbsent(registry, APPLICATION_CONTEXT_HOLDER, ApplicationContextHolder.class);
+ BeanRegistrationUtil.registerIfAbsent(registry, APPLICATION_CONTEXT_HOLDER, SpringContextHolder.class);
// ApplicationContextHolder and HashedWheelTimer are required in DtpExecutor execute method, so they must be registered first
- SpringBeanHelper.registerIfAbsent(registry, DTP_POST_PROCESSOR, DtpPostProcessor.class,
+ BeanRegistrationUtil.registerIfAbsent(registry, DTP_POST_PROCESSOR, DtpPostProcessor.class,
null, Lists.newArrayList(APPLICATION_CONTEXT_HOLDER, HASHED_WHEEL_TIMER));
}
@@ -58,6 +60,6 @@ public class DtpBaseBeanDefinitionRegistrar implements ImportBeanDefinitionRegis
10,
TimeUnit.MILLISECONDS
};
- SpringBeanHelper.registerIfAbsent(registry, HASHED_WHEEL_TIMER, HashedWheelTimer.class, constructorArgs);
+ BeanRegistrationUtil.registerIfAbsent(registry, HASHED_WHEEL_TIMER, HashedWheelTimer.class, constructorArgs);
}
}
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBeanDefinitionRegistrar.java b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBeanDefinitionRegistrar.java
similarity index 75%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/DtpBeanDefinitionRegistrar.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBeanDefinitionRegistrar.java
index a01caf296cc77da4ca5250ac41adf30293f9169f..bcd09b8493cddfd67e88ac8b279c3b5156c33f99 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpBeanDefinitionRegistrar.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpBeanDefinitionRegistrar.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring.annotation;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
@@ -23,15 +23,15 @@ import lombok.val;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.dynamictp.common.entity.DtpExecutorProps;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.common.spring.SpringBeanHelper;
import org.dromara.dynamictp.core.executor.ExecutorType;
import org.dromara.dynamictp.core.executor.NamedThreadFactory;
import org.dromara.dynamictp.core.executor.eager.EagerDtpExecutor;
import org.dromara.dynamictp.core.executor.eager.TaskQueue;
import org.dromara.dynamictp.core.executor.priority.PriorityDtpExecutor;
import org.dromara.dynamictp.core.reject.RejectHandlerGetter;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
import org.dromara.dynamictp.core.support.task.wrapper.TaskWrappers;
+import org.dromara.dynamictp.spring.util.BeanRegistrationUtil;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
@@ -42,23 +42,7 @@ import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.ALLOW_CORE_THREAD_TIMEOUT;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.AWAIT_TERMINATION_SECONDS;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.AWARE_NAMES;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.NOTIFY_ENABLED;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.NOTIFY_ITEMS;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.PLATFORM_IDS;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.PLUGIN_NAMES;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.PRE_START_ALL_CORE_THREADS;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.QUEUE_TIMEOUT;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.REJECT_ENHANCED;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.REJECT_HANDLER_TYPE;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.RUN_TIMEOUT;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.TASK_WRAPPERS;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.THREAD_POOL_ALIAS_NAME;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.THREAD_POOL_NAME;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.TRY_INTERRUPT_WHEN_TIMEOUT;
-import static org.dromara.dynamictp.common.constant.DynamicTpConst.WAIT_FOR_TASKS_TO_COMPLETE_ON_SHUTDOWN;
+import static org.dromara.dynamictp.common.constant.DynamicTpConst.*;
import static org.dromara.dynamictp.common.em.QueueTypeEnum.buildLbq;
import static org.dromara.dynamictp.common.entity.NotifyItem.mergeAllNotifyItems;
@@ -84,15 +68,18 @@ public class DtpBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar
BinderHelper.bindDtpProperties(environment, dtpProperties);
val executors = dtpProperties.getExecutors();
if (CollectionUtils.isEmpty(executors)) {
- log.warn("DynamicTp registrar, no executors are configured.");
+ log.info("DynamicTp registrar, no executors are configured.");
return;
}
executors.forEach(e -> {
+ if (!e.isAutoCreate()) {
+ return;
+ }
Class> executorTypeClass = ExecutorType.getClass(e.getExecutorType());
Map propertyValues = buildPropertyValues(e);
Object[] args = buildConstructorArgs(executorTypeClass, e);
- SpringBeanHelper.register(registry, e.getThreadPoolName(), executorTypeClass, propertyValues, args);
+ BeanRegistrationUtil.register(registry, e.getThreadPoolName(), executorTypeClass, propertyValues, args);
});
}
@@ -106,9 +93,9 @@ public class DtpBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar
propertyValues.put(PRE_START_ALL_CORE_THREADS, props.isPreStartAllCoreThreads());
propertyValues.put(REJECT_HANDLER_TYPE, props.getRejectedHandlerType());
propertyValues.put(REJECT_ENHANCED, props.isRejectEnhanced());
- propertyValues.put(RUN_TIMEOUT, props.getRunTimeout());
+ propertyValues.put(RUN_TIMEOUT_PROP, props.getRunTimeout());
propertyValues.put(TRY_INTERRUPT_WHEN_TIMEOUT, props.isTryInterrupt());
- propertyValues.put(QUEUE_TIMEOUT, props.getQueueTimeout());
+ propertyValues.put(QUEUE_TIMEOUT_PROP, props.getQueueTimeout());
val notifyItems = mergeAllNotifyItems(props.getNotifyItems());
propertyValues.put(NOTIFY_ITEMS, notifyItems);
propertyValues.put(PLATFORM_IDS, props.getPlatformIds());
@@ -144,5 +131,4 @@ public class DtpBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar
RejectHandlerGetter.buildRejectedHandler(props.getRejectedHandlerType())
};
}
-
}
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpConfigurationSelector.java b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpConfigurationSelector.java
similarity index 94%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/DtpConfigurationSelector.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpConfigurationSelector.java
index 18751a7bf24d3c52e893e150983867bd55e8fd93..bc979277b91a283f93d0d182b8b648b8830b634b 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/DtpConfigurationSelector.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/DtpConfigurationSelector.java
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring.annotation;
import org.apache.commons.lang3.BooleanUtils;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.DeferredImportSelector;
import org.springframework.core.Ordered;
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/EnableDynamicTp.java b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/EnableDynamicTp.java
similarity index 96%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/EnableDynamicTp.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/annotation/EnableDynamicTp.java
index 1dbd5cb179461bb9ce9e6b78813e78f4ad44e4fd..c1c54a00cc90e410fee20b5e68789e99ac82cedf 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/EnableDynamicTp.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/annotation/EnableDynamicTp.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring.annotation;
import org.springframework.context.annotation.Import;
diff --git a/common/src/main/java/org/dromara/dynamictp/common/spring/ApplicationContextHolder.java b/spring/src/main/java/org/dromara/dynamictp/spring/holder/SpringContextHolder.java
similarity index 60%
rename from common/src/main/java/org/dromara/dynamictp/common/spring/ApplicationContextHolder.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/holder/SpringContextHolder.java
index 96d84f062edb2cc9d511abc8b4616ef537126b3a..d50941829260912892dae0fc51f864f953f5c677 100644
--- a/common/src/main/java/org/dromara/dynamictp/common/spring/ApplicationContextHolder.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/holder/SpringContextHolder.java
@@ -15,24 +15,24 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.common.spring;
+package org.dromara.dynamictp.spring.holder;
+import org.dromara.dynamictp.common.manager.ContextManager;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ApplicationEvent;
import org.springframework.core.env.Environment;
import java.util.Map;
import java.util.Objects;
/**
- * ApplicationContextHolder related
+ * Manages the Spring ApplicationContext and provides access to beans and environment properties.
*
- * @author yanhom
- * @since 1.0.0
- **/
-public class ApplicationContextHolder implements ApplicationContextAware {
+ * @author vzer200
+ * @since 1.2.0
+ */
+public class SpringContextHolder implements ContextManager, ApplicationContextAware {
private static ApplicationContext context;
@@ -41,15 +41,18 @@ public class ApplicationContextHolder implements ApplicationContextAware {
context = applicationContext;
}
- public static T getBean(Class clazz) {
+ @Override
+ public T getBean(Class clazz) {
return getInstance().getBean(clazz);
}
- public static T getBean(String name, Class clazz) {
+ @Override
+ public T getBean(String name, Class clazz) {
return getInstance().getBean(name, clazz);
}
- public static Map getBeansOfType(Class clazz) {
+ @Override
+ public Map getBeansOfType(Class clazz) {
return getInstance().getBeansOfType(clazz);
}
@@ -60,12 +63,27 @@ public class ApplicationContextHolder implements ApplicationContextAware {
return context;
}
- public static Environment getEnvironment() {
+ @Override
+ public Environment getEnvironment() {
return getInstance().getEnvironment();
}
- public static void publishEvent(ApplicationEvent event) {
- getInstance().publishEvent(event);
+ @Override
+ public String getEnvironmentProperty(String key) {
+ return getEnvironment().getProperty(key);
+ }
+
+ @Override
+ public String getEnvironmentProperty(String key, Object environment) {
+ if (environment instanceof Environment) {
+ Environment env = (Environment) environment;
+ return env.getProperty(key);
+ }
+ return null;
}
+ @Override
+ public String getEnvironmentProperty(String key, String defaultValue) {
+ return getEnvironment().getProperty(key, defaultValue);
+ }
}
diff --git a/spring/src/main/java/org/dromara/dynamictp/spring/initializer/SpringDtpInitializer.java b/spring/src/main/java/org/dromara/dynamictp/spring/initializer/SpringDtpInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..898da01b98abe4cdda8997875b14e4ab99b71b67
--- /dev/null
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/initializer/SpringDtpInitializer.java
@@ -0,0 +1,70 @@
+/*
+ * 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.dromara.dynamictp.spring.initializer;
+
+import org.apache.commons.lang3.StringUtils;
+import org.dromara.dynamictp.core.support.init.DtpInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+
+import static org.dromara.dynamictp.common.constant.DynamicTpConst.APP_ENV_KEY;
+import static org.dromara.dynamictp.common.constant.DynamicTpConst.APP_NAME_KEY;
+import static org.dromara.dynamictp.common.constant.DynamicTpConst.APP_PORT_KEY;
+
+/**
+ * SpringDtpInitializer related
+ *
+ * @author yanhom
+ * @since 1.2.0
+ */
+public class SpringDtpInitializer implements DtpInitializer {
+
+ private static final String SPRING_APP_NAME_KEY = "spring.application.name";
+
+ private static final String SERVER_PORT = "server.port";
+
+ private static final String ACTIVE_PROFILES = "spring.profiles.active";
+
+ @Override
+ public String getName() {
+ return "SpringDtpInitializer";
+ }
+
+ @Override
+ public void init(Object... args) {
+ ConfigurableApplicationContext c = (ConfigurableApplicationContext) args[0];
+ String appName = c.getEnvironment().getProperty(SPRING_APP_NAME_KEY, "application");
+ String appPort = c.getEnvironment().getProperty(SERVER_PORT, "0");
+ String appEnv = c.getEnvironment().getProperty(ACTIVE_PROFILES);
+ if (StringUtils.isBlank(appEnv)) {
+ // fix #I8SSGQ
+ String[] profiles = c.getEnvironment().getActiveProfiles();
+ if (profiles.length < 1) {
+ profiles = c.getEnvironment().getDefaultProfiles();
+ }
+ if (profiles.length >= 1) {
+ appEnv = profiles[0];
+ }
+ }
+ if (StringUtils.isBlank(appEnv)) {
+ appEnv = "unknown";
+ }
+ System.setProperty(APP_NAME_KEY, appName);
+ System.setProperty(APP_PORT_KEY, appPort);
+ System.setProperty(APP_ENV_KEY, appEnv);
+ }
+}
diff --git a/spring/src/main/java/org/dromara/dynamictp/spring/lifecycle/DtpLifecycleSpringAdapter.java b/spring/src/main/java/org/dromara/dynamictp/spring/lifecycle/DtpLifecycleSpringAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e2169319337b11ecbe16d89f78bfcf914cb282e
--- /dev/null
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/lifecycle/DtpLifecycleSpringAdapter.java
@@ -0,0 +1,86 @@
+/*
+ * 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.dromara.dynamictp.spring.lifecycle;
+
+import org.dromara.dynamictp.core.lifecycle.LifeCycleManagement;
+import org.springframework.context.SmartLifecycle;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Adapts LifeCycleManagement to Spring's SmartLifecycle interface.
+ *
+ * @author vzer200
+ * @since 1.2.0
+ */
+public class DtpLifecycleSpringAdapter implements SmartLifecycle {
+
+ private final LifeCycleManagement lifeCycleManagement;
+
+ private final AtomicBoolean running = new AtomicBoolean(false);
+
+ public DtpLifecycleSpringAdapter(LifeCycleManagement lifeCycleManagement) {
+ this.lifeCycleManagement = lifeCycleManagement;
+ }
+
+ @Override
+ public void start() {
+ if (this.running.compareAndSet(false, true)) {
+ lifeCycleManagement.start();
+ }
+ }
+
+ @Override
+ public void stop() {
+ if (this.running.compareAndSet(true, false)) {
+ lifeCycleManagement.stop();
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ return this.running.get();
+ }
+
+ @Override
+ public void stop(Runnable callback) {
+ if (this.running.compareAndSet(true, false)) {
+ lifeCycleManagement.stop(callback);
+ }
+ }
+
+ /**
+ * Compatible with lower versions of spring.
+ *
+ * @return isAutoStartup
+ */
+ @Override
+ public boolean isAutoStartup() {
+ return lifeCycleManagement.isAutoStartup();
+ }
+
+ /**
+ * Compatible with lower versions of spring.
+ *
+ * @return phase
+ */
+ @Override
+ public int getPhase() {
+ return lifeCycleManagement.getPhase();
+ }
+}
diff --git a/spring/src/main/java/org/dromara/dynamictp/spring/listener/DtpApplicationListener.java b/spring/src/main/java/org/dromara/dynamictp/spring/listener/DtpApplicationListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd243a0837b9f5226a1100a21472171eaf8886c5
--- /dev/null
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/listener/DtpApplicationListener.java
@@ -0,0 +1,40 @@
+/*
+ * 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.dromara.dynamictp.spring.listener;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.dynamictp.common.event.CustomContextRefreshedEvent;
+import org.dromara.dynamictp.common.manager.EventBusManager;
+import org.springframework.context.event.ContextRefreshedEvent;
+
+/**
+ * DtpApplicationListener related
+ *
+ * @author vzer200
+ * @since 1.2.0
+ **/
+@Slf4j
+public class DtpApplicationListener extends OnceApplicationContextEventListener {
+
+ @Override
+ protected void onContextRefreshedEvent(ContextRefreshedEvent event) {
+ CustomContextRefreshedEvent refreshedEvent = new CustomContextRefreshedEvent(this);
+ EventBusManager.post(refreshedEvent);
+ }
+}
+
diff --git a/common/src/main/java/org/dromara/dynamictp/common/spring/OnceApplicationContextEventListener.java b/spring/src/main/java/org/dromara/dynamictp/spring/listener/OnceApplicationContextEventListener.java
similarity index 98%
rename from common/src/main/java/org/dromara/dynamictp/common/spring/OnceApplicationContextEventListener.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/listener/OnceApplicationContextEventListener.java
index afa1753d673cbd4f96752bd3dc6d32e4e0f47fb7..df92f601d8fe04dbb20a07e884305e6c93847ec2 100644
--- a/common/src/main/java/org/dromara/dynamictp/common/spring/OnceApplicationContextEventListener.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/listener/OnceApplicationContextEventListener.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.common.spring;
+package org.dromara.dynamictp.spring.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
@@ -28,6 +28,7 @@ import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.ContextStartedEvent;
import org.springframework.context.event.ContextStoppedEvent;
+
import static org.springframework.util.ObjectUtils.nullSafeEquals;
/**
@@ -105,4 +106,3 @@ public abstract class OnceApplicationContextEventListener implements Application
}
}
-
diff --git a/core/src/main/java/org/dromara/dynamictp/core/spring/YamlPropertySourceFactory.java b/spring/src/main/java/org/dromara/dynamictp/spring/support/YamlPropertySourceFactory.java
similarity index 97%
rename from core/src/main/java/org/dromara/dynamictp/core/spring/YamlPropertySourceFactory.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/support/YamlPropertySourceFactory.java
index 320aafa626df22be7dcec1f1461946c72b269bda..c568d386872d4ffb683559b41847fc2322e01d52 100644
--- a/core/src/main/java/org/dromara/dynamictp/core/spring/YamlPropertySourceFactory.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/support/YamlPropertySourceFactory.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.core.spring;
+package org.dromara.dynamictp.spring.support;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
diff --git a/common/src/main/java/org/dromara/dynamictp/common/spring/SpringBeanHelper.java b/spring/src/main/java/org/dromara/dynamictp/spring/util/BeanRegistrationUtil.java
similarity index 97%
rename from common/src/main/java/org/dromara/dynamictp/common/spring/SpringBeanHelper.java
rename to spring/src/main/java/org/dromara/dynamictp/spring/util/BeanRegistrationUtil.java
index 6011f0253670ffe4e0b74d615a61276d4e1266ef..cb0abcbfa849982c7a4f875ab29858786d4e3eaf 100644
--- a/common/src/main/java/org/dromara/dynamictp/common/spring/SpringBeanHelper.java
+++ b/spring/src/main/java/org/dromara/dynamictp/spring/util/BeanRegistrationUtil.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.common.spring;
+package org.dromara.dynamictp.spring.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -35,9 +35,9 @@ import java.util.Map;
* @since 1.0.4
**/
@Slf4j
-public final class SpringBeanHelper {
+public final class BeanRegistrationUtil {
- private SpringBeanHelper() { }
+ private BeanRegistrationUtil() { }
public static void register(BeanDefinitionRegistry registry,
String beanName,
diff --git a/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager b/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager
new file mode 100644
index 0000000000000000000000000000000000000000..8f0c7531962b126065582b3c60dc3cb6756c7530
--- /dev/null
+++ b/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager
@@ -0,0 +1 @@
+org.dromara.dynamictp.spring.holder.SpringContextHolder
diff --git a/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.core.support.init.DtpInitializer b/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.core.support.init.DtpInitializer
new file mode 100644
index 0000000000000000000000000000000000000000..327ad8d07286b955fc02c8d4e55f2ca4b9aa8f09
--- /dev/null
+++ b/spring/src/main/resources/META-INF/services/org.dromara.dynamictp.core.support.init.DtpInitializer
@@ -0,0 +1 @@
+org.dromara.dynamictp.spring.initializer.SpringDtpInitializer
\ No newline at end of file
diff --git a/starter/pom.xml b/starter/pom.xml
index 9a5ea4d9e79b33bec733b5cbc3fd037dd4384780..4d22989ddbc66201d5c7a6a58ca9282e56b92131 100644
--- a/starter/pom.xml
+++ b/starter/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-starter
diff --git a/starter/starter-adapter/pom.xml b/starter/starter-adapter/pom.xml
index 29e5e9b8efb55136d3964e58942cc2471207f589..ebd5f60ee46aa4d6643a920b216bd04c0e3954ea 100644
--- a/starter/starter-adapter/pom.xml
+++ b/starter/starter-adapter/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-starter-adapter
@@ -24,6 +24,8 @@
starter-adapter-tars
starter-adapter-sofa
starter-adapter-rabbitmq
+ starter-adapter-liteflow
+ starter-adapter-thrift
diff --git a/starter/starter-adapter/starter-adapter-brpc/pom.xml b/starter/starter-adapter/starter-adapter-brpc/pom.xml
index fae162f10b644baca5bbdbfb02fcb40b652289e9..54dd9b7968f2666eccb82f778cce28e5491b357d 100644
--- a/starter/starter-adapter/starter-adapter-brpc/pom.xml
+++ b/starter/starter-adapter/starter-adapter-brpc/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-brpc
diff --git a/starter/starter-adapter/starter-adapter-brpc/src/main/java/org/dromara/dynamictp/starter/adapter/brpc/autoconfigure/BrpcTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-brpc/src/main/java/org/dromara/dynamictp/starter/adapter/brpc/autoconfigure/BrpcTpAutoConfiguration.java
index 3d9403be975f0d2c49f7507f42a99061a1532e75..cf35f129c84a95a0b9886890a9ff9041042dc911 100644
--- a/starter/starter-adapter/starter-adapter-brpc/src/main/java/org/dromara/dynamictp/starter/adapter/brpc/autoconfigure/BrpcTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-brpc/src/main/java/org/dromara/dynamictp/starter/adapter/brpc/autoconfigure/BrpcTpAutoConfiguration.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.adapter.brpc.autoconfigure;
import org.dromara.dynamictp.apapter.brpc.client.StarlightClientDtpAdapter;
import org.dromara.dynamictp.apapter.brpc.server.StarlightServerDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-common/pom.xml b/starter/starter-adapter/starter-adapter-common/pom.xml
index 9072e5f00eee0d34748dce79435b1180cb43ed3d..5fbd8789e1c4e3ffbe29040e196b6e546687b7ed 100644
--- a/starter/starter-adapter/starter-adapter-common/pom.xml
+++ b/starter/starter-adapter/starter-adapter-common/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-common
diff --git a/starter/starter-adapter/starter-adapter-common/src/main/java/org/dromara/dynamictp/starter/adapter/common/autoconfigure/AdapterCommonAutoConfiguration.java b/starter/starter-adapter/starter-adapter-common/src/main/java/org/dromara/dynamictp/starter/adapter/common/autoconfigure/AdapterCommonAutoConfiguration.java
index f09cf2167cc6000417086303d2b03ef7c43dcb45..f7dd1086697589e1e7233972b3f103923dfaad01 100644
--- a/starter/starter-adapter/starter-adapter-common/src/main/java/org/dromara/dynamictp/starter/adapter/common/autoconfigure/AdapterCommonAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-common/src/main/java/org/dromara/dynamictp/starter/adapter/common/autoconfigure/AdapterCommonAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.common.autoconfigure;
import org.dromara.dynamictp.adapter.common.DtpAdapterListener;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/starter/starter-adapter/starter-adapter-dubbo/pom.xml b/starter/starter-adapter/starter-adapter-dubbo/pom.xml
index 5b7d9bf013465e76fa91b231c8f944eec173bc4a..e044f804eed522836afc36f872941a20944e1a48 100644
--- a/starter/starter-adapter/starter-adapter-dubbo/pom.xml
+++ b/starter/starter-adapter/starter-adapter-dubbo/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-dubbo
diff --git a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/AlibabaDubboTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/AlibabaDubboTpAutoConfiguration.java
index c2adbf140d2d8a91b9e2b7733c768a0d6a0e972c..2df9704b25494973859e459da80f1964db2ba4c1 100644
--- a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/AlibabaDubboTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/AlibabaDubboTpAutoConfiguration.java
@@ -18,8 +18,8 @@
package org.dromara.dynamictp.starter.adapter.dubbo.autoconfigure;
import org.dromara.dynamictp.adapter.dubbo.alibaba.AlibabaDubboDtpAdapter;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.adapter.dubbo.autoconfigure.condition.ConditionOnAlibabaDubboApp;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/ApacheDubboTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/ApacheDubboTpAutoConfiguration.java
index a9a5a9c8f6d304656599cd48bc04256b614eb04a..b1c11e331241c18f194a09968269a61c6357dcbc 100644
--- a/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/ApacheDubboTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-dubbo/src/main/java/org/dromara/dynamictp/starter/adapter/dubbo/autoconfigure/ApacheDubboTpAutoConfiguration.java
@@ -18,8 +18,8 @@
package org.dromara.dynamictp.starter.adapter.dubbo.autoconfigure;
import org.dromara.dynamictp.adapter.dubbo.apache.ApacheDubboDtpAdapter;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.adapter.dubbo.autoconfigure.condition.ConditionOnApacheDubboApp;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/starter/starter-adapter/starter-adapter-grpc/pom.xml b/starter/starter-adapter/starter-adapter-grpc/pom.xml
index 40655d60e8e2933acf7829163665286293cce382..d1508d75634a859d5fab868cf73f9ee54c20042e 100644
--- a/starter/starter-adapter/starter-adapter-grpc/pom.xml
+++ b/starter/starter-adapter/starter-adapter-grpc/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-grpc
diff --git a/starter/starter-adapter/starter-adapter-grpc/src/main/java/org/dromara/dynamictp/starter/adapter/grpc/autoconfigure/GrpcTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-grpc/src/main/java/org/dromara/dynamictp/starter/adapter/grpc/autoconfigure/GrpcTpAutoConfiguration.java
index 7860535b370650f9a614761952a70b9bfe9a9247..d28b85778485dd78dfdc5f3b2a3e30cda35ea25a 100644
--- a/starter/starter-adapter/starter-adapter-grpc/src/main/java/org/dromara/dynamictp/starter/adapter/grpc/autoconfigure/GrpcTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-grpc/src/main/java/org/dromara/dynamictp/starter/adapter/grpc/autoconfigure/GrpcTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.grpc.autoconfigure;
import org.dromara.dynamictp.adapter.grpc.GrpcDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-hystrix/pom.xml b/starter/starter-adapter/starter-adapter-hystrix/pom.xml
index bbdac9a9e33bd0daa0767367ce925068f8c037df..8a1788c21b4f8bdef27dc270608af102fb7b6194 100644
--- a/starter/starter-adapter/starter-adapter-hystrix/pom.xml
+++ b/starter/starter-adapter/starter-adapter-hystrix/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-hystrix
diff --git a/starter/starter-adapter/starter-adapter-hystrix/src/main/java/org/dromara/dynamictp/starter/adapter/hystrix/autoconfigure/HystrixTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-hystrix/src/main/java/org/dromara/dynamictp/starter/adapter/hystrix/autoconfigure/HystrixTpAutoConfiguration.java
index f4c00167e49dc9a449c9b5e96b112279e40119da..d944f979f1ebe27a70f09dc6fcfa3205af13abea 100644
--- a/starter/starter-adapter/starter-adapter-hystrix/src/main/java/org/dromara/dynamictp/starter/adapter/hystrix/autoconfigure/HystrixTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-hystrix/src/main/java/org/dromara/dynamictp/starter/adapter/hystrix/autoconfigure/HystrixTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.hystrix.autoconfigure;
import org.dromara.dynamictp.adapter.hystrix.HystrixDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-liteflow/pom.xml b/starter/starter-adapter/starter-adapter-liteflow/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cf8c435e317262d20bb3e9ac6218eca0b0da718a
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-liteflow/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-starter-adapter
+ 1.2.1
+ ../pom.xml
+
+ dynamic-tp-spring-boot-starter-adapter-liteflow
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring-boot-starter-adapter-common
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-adapter-liteflow
+
+
+
diff --git a/starter/starter-adapter/starter-adapter-liteflow/src/main/java/org/dromara/dynamictp/starter/adapter/liteflow/autoconfigure/LiteflowTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-liteflow/src/main/java/org/dromara/dynamictp/starter/adapter/liteflow/autoconfigure/LiteflowTpAutoConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..696e4c0a2f9d711e54dbf76496e0e63b43dc8eb1
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-liteflow/src/main/java/org/dromara/dynamictp/starter/adapter/liteflow/autoconfigure/LiteflowTpAutoConfiguration.java
@@ -0,0 +1,46 @@
+/*
+ * 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.dromara.dynamictp.starter.adapter.liteflow.autoconfigure;
+
+import org.dromara.dynamictp.adapter.liteflow.LiteflowDtpAdapter;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * LiteflowTpAutoConfiguration related
+ *
+ * @author yanhom
+ * @since 1.1.9
+ */
+@Configuration
+@ConditionalOnClass(name = "com.yomahub.liteflow.core.FlowExecutor")
+@ConditionalOnBean({DtpBaseBeanConfiguration.class})
+@AutoConfigureAfter({DtpBaseBeanConfiguration.class})
+public class LiteflowTpAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public LiteflowDtpAdapter liteflowDtpAdapter() {
+ return new LiteflowDtpAdapter();
+ }
+}
diff --git a/starter/starter-adapter/starter-adapter-liteflow/src/main/resources/META-INF/spring.factories b/starter/starter-adapter/starter-adapter-liteflow/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000000000000000000000000000000000..31a4216c4c0b605c6c7d91ddd53ef934d3360402
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-liteflow/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ org.dromara.dynamictp.starter.adapter.liteflow.autoconfigure.LiteflowTpAutoConfiguration
\ No newline at end of file
diff --git a/starter/starter-adapter/starter-adapter-motan/pom.xml b/starter/starter-adapter/starter-adapter-motan/pom.xml
index a921c95bdcde4158e992bd348c962e877c21b6d6..4f117582cb22dc580436acb67ad76b8655108ef7 100644
--- a/starter/starter-adapter/starter-adapter-motan/pom.xml
+++ b/starter/starter-adapter/starter-adapter-motan/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-motan
diff --git a/starter/starter-adapter/starter-adapter-motan/src/main/java/org/dromara/dynamictp/starter/adapter/motan/autoconfigure/MotanTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-motan/src/main/java/org/dromara/dynamictp/starter/adapter/motan/autoconfigure/MotanTpAutoConfiguration.java
index 0d18895f5e9c30ed62da0f63206eed4f9cd37b86..7b2456ea47f2957f2f9e2e1368e9aca0e108501d 100644
--- a/starter/starter-adapter/starter-adapter-motan/src/main/java/org/dromara/dynamictp/starter/adapter/motan/autoconfigure/MotanTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-motan/src/main/java/org/dromara/dynamictp/starter/adapter/motan/autoconfigure/MotanTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.motan.autoconfigure;
import org.dromara.dynamictp.adapter.motan.MotanDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-okhttp3/pom.xml b/starter/starter-adapter/starter-adapter-okhttp3/pom.xml
index 845c40340f56c6c4501b03b8d8e0cce6a0980cb4..fcb1ba027f6e7af795a9893fe83dec7282c45cf0 100644
--- a/starter/starter-adapter/starter-adapter-okhttp3/pom.xml
+++ b/starter/starter-adapter/starter-adapter-okhttp3/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-okhttp3
diff --git a/starter/starter-adapter/starter-adapter-okhttp3/src/main/java/org/dromara/dynamictp/starter/adapter/okhttp3/autoconfigure/Okhttp3TpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-okhttp3/src/main/java/org/dromara/dynamictp/starter/adapter/okhttp3/autoconfigure/Okhttp3TpAutoConfiguration.java
index eb81039a1fa48339ce86a600c96274248511ae6a..b38fd4c0b16557236cc18328ae8b9d41e2ebb688 100644
--- a/starter/starter-adapter/starter-adapter-okhttp3/src/main/java/org/dromara/dynamictp/starter/adapter/okhttp3/autoconfigure/Okhttp3TpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-okhttp3/src/main/java/org/dromara/dynamictp/starter/adapter/okhttp3/autoconfigure/Okhttp3TpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.okhttp3.autoconfigure;
import org.dromara.dynamictp.adapter.okhttp3.Okhttp3DtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-rabbitmq/pom.xml b/starter/starter-adapter/starter-adapter-rabbitmq/pom.xml
index 0a6b787d58e33d9350bcebb03bf535b3dc590b27..1f7c4ef8632fc71e6d3660195bbe83eb66d3be8b 100644
--- a/starter/starter-adapter/starter-adapter-rabbitmq/pom.xml
+++ b/starter/starter-adapter/starter-adapter-rabbitmq/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-rabbitmq
diff --git a/starter/starter-adapter/starter-adapter-rabbitmq/src/main/java/org/dromara/dynamictp/starter/adapter/rabbitmq/autoconfigure/RabbitMqTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-rabbitmq/src/main/java/org/dromara/dynamictp/starter/adapter/rabbitmq/autoconfigure/RabbitMqTpAutoConfiguration.java
index 22ace78119379e03faf1a91bb80cb4f91dbcd26e..f9dc959be12e0d88c325d2b7f3ce2240cb1eab34 100644
--- a/starter/starter-adapter/starter-adapter-rabbitmq/src/main/java/org/dromara/dynamictp/starter/adapter/rabbitmq/autoconfigure/RabbitMqTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-rabbitmq/src/main/java/org/dromara/dynamictp/starter/adapter/rabbitmq/autoconfigure/RabbitMqTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.rabbitmq.autoconfigure;
import org.dromara.dynamictp.adapter.rabbitmq.RabbitMqDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-rocketmq/pom.xml b/starter/starter-adapter/starter-adapter-rocketmq/pom.xml
index 094c516a875364ba5cf117de0694629b955965ac..5feee39238aa26ecefeef69105ff0135331e820d 100644
--- a/starter/starter-adapter/starter-adapter-rocketmq/pom.xml
+++ b/starter/starter-adapter/starter-adapter-rocketmq/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-rocketmq
diff --git a/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/AliyunOnsRocketMqAutoConfiguration.java b/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/AliyunOnsRocketMqAutoConfiguration.java
index 42903d11859dacd4d19c6897f38a22ccb939ee22..889f0c63fa7274a9d4d3a2044b9800c42364b386 100644
--- a/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/AliyunOnsRocketMqAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/AliyunOnsRocketMqAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.rocketmq.autoconfigure;
import org.dromara.dynamictp.adapter.rocketmq.AliyunOnsRocketMqAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/RocketMqTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/RocketMqTpAutoConfiguration.java
index df99d1e5756cdac7258245e34cbfd5d5725a0bea..46681282c9f6373ee3d074f133c0204a404f4bf5 100644
--- a/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/RocketMqTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-rocketmq/src/main/java/org/dromara/dynamictp/starter/adapter/rocketmq/autoconfigure/RocketMqTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.rocketmq.autoconfigure;
import org.dromara.dynamictp.adapter.rocketmq.RocketMqDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-sofa/pom.xml b/starter/starter-adapter/starter-adapter-sofa/pom.xml
index 8bd5ca172c0e418a0b3d5677f68169c0a45b3ddb..10dd1c51c4760d9b06adba6db3ae1602f1f93a2f 100644
--- a/starter/starter-adapter/starter-adapter-sofa/pom.xml
+++ b/starter/starter-adapter/starter-adapter-sofa/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-sofa
diff --git a/starter/starter-adapter/starter-adapter-sofa/src/main/java/org/dromara/dynamictp/starter/adapter/sofa/autoconfigure/SofaTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-sofa/src/main/java/org/dromara/dynamictp/starter/adapter/sofa/autoconfigure/SofaTpAutoConfiguration.java
index 193151a25ada36bab6ecb0cd70cf1f4c4abf2a34..a2fbf96e2aaa9ebf797c9d67ddab2edd0c71133e 100644
--- a/starter/starter-adapter/starter-adapter-sofa/src/main/java/org/dromara/dynamictp/starter/adapter/sofa/autoconfigure/SofaTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-sofa/src/main/java/org/dromara/dynamictp/starter/adapter/sofa/autoconfigure/SofaTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.sofa.autoconfigure;
import org.dromara.dynamictp.adapter.sofa.SofaDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-tars/pom.xml b/starter/starter-adapter/starter-adapter-tars/pom.xml
index 79ffe148d3716e2c50716dc551ef9e86eb347df5..c4edf182b95223730a0976044cf64d79fad39362 100644
--- a/starter/starter-adapter/starter-adapter-tars/pom.xml
+++ b/starter/starter-adapter/starter-adapter-tars/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-tars
diff --git a/starter/starter-adapter/starter-adapter-tars/src/main/java/org/dromara/dynamictp/starter/adapter/tars/autoconfigure/TarsTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-tars/src/main/java/org/dromara/dynamictp/starter/adapter/tars/autoconfigure/TarsTpAutoConfiguration.java
index 49fa26bc2b213b6ce3cc145bb3c6e2e331e63fe0..187fef76e2c625de643fcc3cd4c35f6c7272fbe0 100644
--- a/starter/starter-adapter/starter-adapter-tars/src/main/java/org/dromara/dynamictp/starter/adapter/tars/autoconfigure/TarsTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-tars/src/main/java/org/dromara/dynamictp/starter/adapter/tars/autoconfigure/TarsTpAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.tars.autoconfigure;
import org.dromara.dynamictp.adapter.tars.TarsDtpAdapter;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
diff --git a/starter/starter-adapter/starter-adapter-thrift/pom.xml b/starter/starter-adapter/starter-adapter-thrift/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..445dc96984ad64a53d2b6fed39c62e00ed8a9a3e
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-thrift/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-starter-adapter
+ 1.2.1
+ ../pom.xml
+
+ dynamic-tp-spring-boot-starter-adapter-thrift
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring-boot-starter-adapter-common
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-adapter-thrift
+
+
+
diff --git a/starter/starter-adapter/starter-adapter-thrift/src/main/java/org/dromara/dynamictp/starter/adapter/thrift/autoconfigure/ThriftTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-thrift/src/main/java/org/dromara/dynamictp/starter/adapter/thrift/autoconfigure/ThriftTpAutoConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2ec34bd951991b09952b40856cc398c673f78e2
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-thrift/src/main/java/org/dromara/dynamictp/starter/adapter/thrift/autoconfigure/ThriftTpAutoConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ * 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.dromara.dynamictp.starter.adapter.thrift.autoconfigure;
+
+import org.dromara.dynamictp.adapter.thrift.ThriftDtpAdapter;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * ThriftTpAutoConfiguration related
+ *
+ * @author devin
+ * @since 1.2.2
+ */
+@Configuration
+@ConditionalOnClass(name = "org.apache.thrift.server.TServer")
+@ConditionalOnBean({DtpBaseBeanConfiguration.class})
+@AutoConfigureAfter({DtpBaseBeanConfiguration.class})
+@SuppressWarnings("all")
+public class ThriftTpAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public ThriftDtpAdapter thriftDtpAdapter() {
+ return new ThriftDtpAdapter();
+ }
+}
diff --git a/starter/starter-adapter/starter-adapter-thrift/src/main/resources/META-INF/spring.factories b/starter/starter-adapter/starter-adapter-thrift/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000000000000000000000000000000000..f1df61d01f5b320873417092eedfc23010e909e9
--- /dev/null
+++ b/starter/starter-adapter/starter-adapter-thrift/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.dromara.dynamictp.starter.adapter.thrift.autoconfigure.ThriftTpAutoConfiguration
diff --git a/starter/starter-adapter/starter-adapter-webserver/pom.xml b/starter/starter-adapter/starter-adapter-webserver/pom.xml
index 859c6f40aba50e1032ea5bc596550915dffefe45..fe1940b40badc820fc7b4ec48dc2850f61480a99 100644
--- a/starter/starter-adapter/starter-adapter-webserver/pom.xml
+++ b/starter/starter-adapter/starter-adapter-webserver/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-adapter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-adapter-webserver
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/AbstractWebServerDtpAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/AbstractWebServerDtpAdapter.java
index 3623759efad595669d92830804c678dfb238e15c..4af71ddd988b310769b4e0db0625d247087be510 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/AbstractWebServerDtpAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/AbstractWebServerDtpAdapter.java
@@ -19,9 +19,10 @@ package org.dromara.dynamictp.starter.adapter.webserver;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.adapter.common.AbstractDtpAdapter;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
import org.dromara.dynamictp.core.converter.ExecutorConverter;
+import org.dromara.dynamictp.spring.holder.SpringContextHolder;
import org.springframework.boot.web.context.WebServerApplicationContext;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.boot.web.server.WebServer;
@@ -29,6 +30,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
+import java.util.Objects;
import java.util.concurrent.Executor;
/**
@@ -37,8 +39,7 @@ import java.util.concurrent.Executor;
* @author yanhom
* @author dragon-zhang
* @since 1.0.0
- */
-@Slf4j
+ */@Slf4j
public abstract class AbstractWebServerDtpAdapter extends AbstractDtpAdapter
implements ApplicationListener {
@@ -46,12 +47,12 @@ public abstract class AbstractWebServerDtpAdapter extends Ab
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof WebServerInitializedEvent) {
try {
- DtpProperties dtpProperties = ApplicationContextHolder.getBean(DtpProperties.class);
+ DtpProperties dtpProperties = ContextManagerHelper.getBean(DtpProperties.class);
initialize();
afterInitialize();
refresh(dtpProperties);
} catch (Exception e) {
- log.error("Init web server thread pool failed.", e);
+ log.error("DynamicTp adapter, {} init failed.", getTpName(), e);
}
}
}
@@ -59,13 +60,18 @@ public abstract class AbstractWebServerDtpAdapter extends Ab
@Override
protected void initialize() {
super.initialize();
- if (executors.get(getTpName()) == null) {
- ApplicationContext applicationContext = ApplicationContextHolder.getInstance();
- WebServer webServer = ((WebServerApplicationContext) applicationContext).getWebServer();
- doEnhance(webServer);
- log.info("DynamicTp adapter, web server {} executor init end, executor: {}",
- getTpName(), ExecutorConverter.toMainFields(executors.get(getTpName())));
+ if (Objects.nonNull(executors.get(getTpName()))) {
+ return;
+ }
+ ApplicationContext applicationContext = SpringContextHolder.getInstance();
+ WebServer webServer = ((WebServerApplicationContext) applicationContext).getWebServer();
+ doEnhance(webServer);
+ if (Objects.isNull(executors.get(getTpName()))) {
+ return;
}
+ log.info("DynamicTp adapter, {} init end, executor: {}.",
+ getTpName(), ExecutorConverter.toMainFields(executors.get(getTpName())));
+
}
protected String getTpName() {
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/WebServerTpAutoConfiguration.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/WebServerTpAutoConfiguration.java
index cd587d42cde97e9af544e269d2c00c93dfd3d656..3c60c07a11bde5bf4884dcd483b7ad95a50caa1c 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/WebServerTpAutoConfiguration.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/WebServerTpAutoConfiguration.java
@@ -17,7 +17,7 @@
package org.dromara.dynamictp.starter.adapter.webserver.autocconfigure;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.adapter.webserver.autocconfigure.condition.ConditionalOnJettyWebServer;
import org.dromara.dynamictp.starter.adapter.webserver.autocconfigure.condition.ConditionalOnTomcatWebServer;
import org.dromara.dynamictp.starter.adapter.webserver.autocconfigure.condition.ConditionalOnUndertowWebServer;
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnJettyWebServerCondition.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnJettyWebServerCondition.java
index 53a196d71185dcfed513fffb36d268dd10a11509..724951184f73dec504ff6cb8827931293a347751 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnJettyWebServerCondition.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnJettyWebServerCondition.java
@@ -33,8 +33,10 @@ public class OnJettyWebServerCondition extends AnyNestedCondition {
}
@ConditionalOnBean(name = {"JettyServletWebServerFactory"})
- static class ServletWebServer { }
+ static class ServletWebServer {
+ }
@ConditionalOnBean(name = {"JettyReactiveWebServerFactory"})
- static class ReactiveWebServer { }
+ static class ReactiveWebServer {
+ }
}
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnTomcatWebServerCondition.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnTomcatWebServerCondition.java
index cfba98841059d82c4078ae94f03c10753c007f7b..0de4ba907fac721c4424a027b7f666693fd9bef6 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnTomcatWebServerCondition.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnTomcatWebServerCondition.java
@@ -33,8 +33,15 @@ public class OnTomcatWebServerCondition extends AnyNestedCondition {
}
@ConditionalOnBean(name = {"tomcatServletWebServerFactory"})
- static class ServletWebServer { }
+ static class ServletWebServer {
+ }
@ConditionalOnBean(name = {"tomcatReactiveWebServerFactory"})
- static class ReactiveWebServer { }
+ static class ReactiveWebServer {
+ }
+
+ @ConditionalOnBean(name = {"tomcatEmbeddedServletContainerFactory"})
+ static class ServletWebServer1x {
+ }
+
}
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnUndertowWebServerCondition.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnUndertowWebServerCondition.java
index 5abb711bcc74e89d4befd157eb6d37415cea7299..8fc6d65455378a18826c1dcc5f92b8ab7a99cf51 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnUndertowWebServerCondition.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/autocconfigure/condition/OnUndertowWebServerCondition.java
@@ -34,8 +34,10 @@ public class OnUndertowWebServerCondition extends AnyNestedCondition {
}
@ConditionalOnBean(name = {"undertowServletWebServerFactory"})
- static class ServletWebServer { }
+ static class ServletWebServer {
+ }
@ConditionalOnBean(name = {"undertowReactiveWebServerFactory"})
- static class ReactiveWebServer { }
+ static class ReactiveWebServer {
+ }
}
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/jetty/JettyDtpAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/jetty/JettyDtpAdapter.java
index 22f249dbb4e33c50d83c9765af5bc5032245b669..6957f947d122080cc2378078b65fc51f4248cb68 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/jetty/JettyDtpAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/jetty/JettyDtpAdapter.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.starter.adapter.webserver.jetty;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
import org.dromara.dynamictp.common.util.ReflectionUtil;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
import org.dromara.dynamictp.starter.adapter.webserver.AbstractWebServerDtpAdapter;
import org.eclipse.jetty.io.ManagedSelector;
@@ -95,11 +95,7 @@ public class JettyDtpAdapter extends AbstractWebServerDtpAdapter {
public void allowCoreThreadTimeOut(boolean value) {
getTomcatExecutor().allowCoreThreadTimeOut(value);
}
-
+
+ @Override
+ public void preStartAllCoreThreads() {
+ getTomcatExecutor().prestartAllCoreThreads();
+ }
+
@Override
public long getKeepAliveTime(TimeUnit unit) {
return getTomcatExecutor().getKeepAliveTime(unit);
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/tomcat/TomcatExecutorProxy.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/tomcat/TomcatExecutorProxy.java
index 4fbd824c547250ccfc284e9b85f16b2769d2b7a6..b623cdc3b23d82455e07b5fbf8e32295febb1bb9 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/tomcat/TomcatExecutorProxy.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/tomcat/TomcatExecutorProxy.java
@@ -20,6 +20,7 @@ package org.dromara.dynamictp.starter.adapter.webserver.tomcat;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.threads.TaskQueue;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
+import org.dromara.dynamictp.common.util.ExecutorUtil;
import org.dromara.dynamictp.common.util.ReflectionUtil;
import org.dromara.dynamictp.core.aware.AwareManager;
import org.dromara.dynamictp.core.aware.RejectHandlerAware;
@@ -53,6 +54,7 @@ public class TomcatExecutorProxy extends ThreadPoolExecutor implements TaskEnhan
executor.getKeepAliveTime(TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS,
executor.getQueue(), executor.getThreadFactory());
setThreadRenewalDelay(executor.getThreadRenewalDelay());
+ allowCoreThreadTimeOut(executor.allowsCoreThreadTimeOut());
Object handler = getRejectedExecutionHandler(executor);
this.rejectHandlerType = handler.getClass().getSimpleName();
@@ -63,14 +65,10 @@ public class TomcatExecutorProxy extends ThreadPoolExecutor implements TaskEnhan
new Class[]{RejectedExecutionHandler.class},
new RejectedInvocationHandler(handler)));
} catch (Throwable t) {
- try {
- ReflectionUtil.setFieldValue("handler", this, Proxy
- .newProxyInstance(handler.getClass().getClassLoader(),
- new Class[]{java.util.concurrent.RejectedExecutionHandler.class},
- new RejectedInvocationHandler(handler)));
- } catch (IllegalAccessException ex) {
- throw new RuntimeException(ex);
- }
+ ReflectionUtil.setFieldValue("handler", this, Proxy
+ .newProxyInstance(handler.getClass().getClassLoader(),
+ new Class[]{java.util.concurrent.RejectedExecutionHandler.class},
+ new RejectedInvocationHandler(handler)));
}
if (executor.getQueue() instanceof TaskQueue) {
((TaskQueue) executor.getQueue()).setParent(this);
@@ -86,14 +84,15 @@ public class TomcatExecutorProxy extends ThreadPoolExecutor implements TaskEnhan
@Override
protected void beforeExecute(Thread t, Runnable r) {
- super.beforeExecute(t, r);
AwareManager.beforeExecute(this, t, r);
+ super.beforeExecute(t, r);
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
AwareManager.afterExecute(this, r, t);
+ ExecutorUtil.tryExecAfterExecute(r, t);
}
@Override
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/EnhancedQueueExecutorProxy.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/EnhancedQueueExecutorProxy.java
index b0dcf9faabdd58d013988fda873027b46dae4532..3c7bd87242718820843b5217b69b2bb036f4b3e6 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/EnhancedQueueExecutorProxy.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/EnhancedQueueExecutorProxy.java
@@ -50,19 +50,20 @@ public class EnhancedQueueExecutorProxy extends EnhancedQueueExecutor implements
.setTerminationTask(executor.getTerminationTask())
.setRegisterMBean(true)
.setMBeanName(executor.getMBeanName()));
+ allowCoreThreadTimeOut(executor.allowsCoreThreadTimeOut());
}
@Override
public void execute(Runnable runnable) {
- Runnable enhancedTask = getEnhancedTask(EnhancedRunnable.of(runnable, this));
- AwareManager.execute(this, enhancedTask);
+ Runnable dtpRunnable = getEnhancedTask(runnable);
+ AwareManager.execute(this, dtpRunnable);
try {
- super.execute(enhancedTask);
+ super.execute(EnhancedRunnable.of(dtpRunnable, this));
} catch (Throwable e) {
Throwable[] suppressedExceptions = e.getSuppressed();
for (Throwable t : suppressedExceptions) {
if (t instanceof RejectedExecutionException) {
- AwareManager.beforeReject(enhancedTask, this);
+ AwareManager.beforeReject(dtpRunnable, this);
return;
}
}
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/UndertowDtpAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/UndertowDtpAdapter.java
index 973e1c68983143e2904021ebf6be24d843c460f0..d2f6f6dea131de7453725b64ec00a4eab73e88c5 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/UndertowDtpAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/UndertowDtpAdapter.java
@@ -64,12 +64,19 @@ public class UndertowDtpAdapter extends AbstractWebServerDtpAdapter
XnioWorker xnioWorker = undertow.getWorker();
Object taskPool = ReflectionUtil.getFieldValue(XnioWorker.class, "taskPool", xnioWorker);
if (Objects.isNull(taskPool)) {
+ log.warn("DynamicTp adapter, {} enhance failed, taskPool is null.");
return;
}
+ String tpName = getTpName();
val handler = TaskPoolHandlerFactory.getTaskPoolHandler(taskPool.getClass().getSimpleName());
+ if (Objects.isNull(handler)) {
+ log.warn("DynamicTp adapter, {} enhance failed, unsupported TaskPool {}.",
+ getTpName(), taskPool.getClass().getSimpleName());
+ return;
+ }
String internalExecutor = handler.taskPoolType().getInternalExecutor();
Object executor = ReflectionUtil.getFieldValue(taskPool.getClass(), internalExecutor, taskPool);
- String tpName = getTpName();
+
if (executor instanceof ThreadPoolExecutor) {
enhanceOriginExecutor(tpName, (ThreadPoolExecutor) executor, internalExecutor, taskPool);
} else if (executor instanceof EnhancedQueueExecutor) {
@@ -78,8 +85,8 @@ public class UndertowDtpAdapter extends AbstractWebServerDtpAdapter
ReflectionUtil.setFieldValue(internalExecutor, taskPool, proxy);
putAndFinalize(tpName, (ExecutorService) executor, new EnhancedQueueExecutorAdapter(proxy));
} catch (Throwable t) {
- log.error("DynamicTp adapter, enhance {} failed, please adjust the order of the two dependencies" +
- "(starter-undertow and starter-adapter-webserver) and try again.", tpName, t);
+ log.warn("DynamicTp adapter, {} enhance failed, please adjust the order of the two dependencies" +
+ "(spring-boot-starter-undertow and starter-adapter-webserver) and try again.", tpName, t);
executors.put(tpName, new ExecutorWrapper(tpName, handler.adapt(executor)));
}
} else {
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/EnhancedQueueExecutorTaskPoolAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/EnhancedQueueExecutorTaskPoolAdapter.java
index 33266ca13a4ebf04c8bca8e0b35e1fe99f1b1fbc..33b0ce646c94ad14d02d66d3a423264ee1e9e1f9 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/EnhancedQueueExecutorTaskPoolAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/EnhancedQueueExecutorTaskPoolAdapter.java
@@ -17,7 +17,7 @@
package org.dromara.dynamictp.starter.adapter.webserver.undertow.taskpool;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.UndertowTaskPoolEnum;
import org.jboss.threads.EnhancedQueueExecutor;
@@ -132,6 +132,11 @@ public class EnhancedQueueExecutorTaskPoolAdapter implements TaskPoolAdapter {
this.executor.allowCoreThreadTimeOut(value);
}
+ @Override
+ public void preStartAllCoreThreads() {
+ this.executor.prestartAllCoreThreads();
+ }
+
@Override
public long getKeepAliveTime(TimeUnit unit) {
return this.executor.getKeepAliveTime().getSeconds();
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExecutorServiceTaskPoolAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExecutorServiceTaskPoolAdapter.java
index fe0071440c4ca5df3cb26c77ce66606bfb3eeff2..2bcedbc9e0382faa26ed0927338599fea9113f1c 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExecutorServiceTaskPoolAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExecutorServiceTaskPoolAdapter.java
@@ -18,8 +18,8 @@
package org.dromara.dynamictp.starter.adapter.webserver.undertow.taskpool;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.UndertowTaskPoolEnum;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ThreadPoolExecutorAdapter;
import java.util.concurrent.ThreadPoolExecutor;
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExternalTaskPoolAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExternalTaskPoolAdapter.java
index 813ccdcd3670f1d89d423952d17786752cd23ac8..ff7ceb949a7e5885204c13a3a7e8dd330bc0fa84 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExternalTaskPoolAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ExternalTaskPoolAdapter.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.starter.adapter.webserver.undertow.taskpool;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.TaskPoolHandlerFactory;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.UndertowTaskPoolEnum;
import org.dromara.dynamictp.common.util.ReflectionUtil;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
import lombok.val;
/**
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/TaskPoolAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/TaskPoolAdapter.java
index f2d4a8f7f2822a68e8c768526b0c043c52c8a990..0daa05ad75f2098c001319c8c933f28694d170ed 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/TaskPoolAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/TaskPoolAdapter.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.adapter.webserver.undertow.taskpool;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.UndertowTaskPoolEnum;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
import java.util.concurrent.Executor;
diff --git a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ThreadPoolExecutorTaskPoolAdapter.java b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ThreadPoolExecutorTaskPoolAdapter.java
index b3bc10f57b57b801ac8f32bdc0d67e3996a9c8bd..6d28dde27930a7afcd2396e6dcf9f05dd56be3f6 100644
--- a/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ThreadPoolExecutorTaskPoolAdapter.java
+++ b/starter/starter-adapter/starter-adapter-webserver/src/main/java/org/dromara/dynamictp/starter/adapter/webserver/undertow/taskpool/ThreadPoolExecutorTaskPoolAdapter.java
@@ -18,8 +18,8 @@
package org.dromara.dynamictp.starter.adapter.webserver.undertow.taskpool;
import org.dromara.dynamictp.starter.adapter.webserver.undertow.UndertowTaskPoolEnum;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ThreadPoolExecutorAdapter;
import java.util.concurrent.ThreadPoolExecutor;
diff --git a/starter/starter-common/pom.xml b/starter/starter-common/pom.xml
index ed5dbc98025068e5953cec1340d7a978806fca9f..363c4e1258e4f119ab9bb5e77266954ad3da241c 100644
--- a/starter/starter-common/pom.xml
+++ b/starter/starter-common/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-common
@@ -31,5 +31,10 @@
org.springframework.boot
spring-boot-starter-actuator
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring
+
\ No newline at end of file
diff --git a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/DtpBootBeanConfiguration.java b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/DtpBootBeanConfiguration.java
index 5adbdcf52633939858aaa231dbf7585fb957b230..ec66e4174f1f1dbb89adc666aada4976b2a42749 100644
--- a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/DtpBootBeanConfiguration.java
+++ b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/DtpBootBeanConfiguration.java
@@ -17,7 +17,7 @@
package org.dromara.dynamictp.starter.common;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.common.monitor.DtpEndpoint;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
diff --git a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/binder/SpringBootPropertiesBinder.java b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/binder/SpringBootPropertiesBinder.java
index c5c2dc52c8c9b095892d0eabac38dec13220c539..b5c15a8af97bc6500a3d9848dcf4ec5d3d9a8f51 100644
--- a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/binder/SpringBootPropertiesBinder.java
+++ b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/binder/SpringBootPropertiesBinder.java
@@ -20,7 +20,8 @@ package org.dromara.dynamictp.starter.common.binder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.PropertiesBinder;
+import org.dromara.dynamictp.common.util.DtpPropertiesBinderUtil;
+import org.dromara.dynamictp.core.support.binder.PropertiesBinder;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyValues;
import org.springframework.boot.context.properties.bind.Bindable;
@@ -44,27 +45,39 @@ import static org.dromara.dynamictp.common.constant.DynamicTpConst.MAIN_PROPERTI
* @since 1.0.3
**/
@Slf4j
-@SuppressWarnings("all")
public class SpringBootPropertiesBinder implements PropertiesBinder {
@Override
public void bindDtpProperties(Map, Object> properties, DtpProperties dtpProperties) {
+ beforeBind(properties, dtpProperties);
try {
Class.forName("org.springframework.boot.context.properties.bind.Binder");
doBindIn2X(properties, dtpProperties);
} catch (ClassNotFoundException e) {
doBindIn1X(properties, dtpProperties);
}
+ afterBind(properties, dtpProperties);
}
@Override
- public void bindDtpProperties(Environment environment, DtpProperties dtpProperties) {
+ public void bindDtpProperties(Object environment, DtpProperties dtpProperties) {
+ if (!(environment instanceof Environment)) {
+ throw new IllegalArgumentException("Invalid environment type, expected org.springframework.core.env.Environment");
+ }
+ Environment env = (Environment) environment;
+ beforeBind(env, dtpProperties);
try {
Class.forName("org.springframework.boot.context.properties.bind.Binder");
- doBindIn2X(environment, dtpProperties);
+ doBindIn2X(env, dtpProperties);
} catch (ClassNotFoundException e) {
- doBindIn1X(environment, dtpProperties);
+ doBindIn1X(env, dtpProperties);
}
+ afterBind(environment, dtpProperties);
+ }
+
+ @Override
+ public void afterBind(Object source, DtpProperties dtpProperties) {
+ DtpPropertiesBinderUtil.tryResetWithGlobalConfig(source, dtpProperties);
}
private void doBindIn2X(Map, Object> properties, DtpProperties dtpProperties) {
@@ -115,4 +128,5 @@ public class SpringBootPropertiesBinder implements PropertiesBinder {
throw new RuntimeException(e);
}
}
+
}
diff --git a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/initializer/DtpApplicationContextInitializer.java b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/initializer/DtpApplicationContextInitializer.java
index ed9b6645bf3f95052933cff559d306cb52218d57..bc9ae931d4df3ced24b3ebcc273ecfe5e982341a 100644
--- a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/initializer/DtpApplicationContextInitializer.java
+++ b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/initializer/DtpApplicationContextInitializer.java
@@ -31,6 +31,6 @@ public class DtpApplicationContextInitializer implements ApplicationContextIniti
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
- DtpInitializerExecutor.init();
+ DtpInitializerExecutor.init(applicationContext);
}
}
diff --git a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/monitor/DtpEndpoint.java b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/monitor/DtpEndpoint.java
index abfca8ce4ea31f8d8f9a956a8766f733d35c5438..c491dac2c127bee9b2e441d010f93c92dffcfb84 100644
--- a/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/monitor/DtpEndpoint.java
+++ b/starter/starter-common/src/main/java/org/dromara/dynamictp/starter/common/monitor/DtpEndpoint.java
@@ -21,11 +21,11 @@ import cn.hutool.core.io.FileUtil;
import com.google.common.collect.Lists;
import lombok.val;
import org.apache.commons.collections4.MapUtils;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
import org.dromara.dynamictp.common.entity.JvmStats;
import org.dromara.dynamictp.common.entity.Metrics;
import org.dromara.dynamictp.core.DtpRegistry;
import org.dromara.dynamictp.core.converter.ExecutorConverter;
+import org.dromara.dynamictp.common.manager.ContextManagerHelper;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
import org.dromara.dynamictp.core.aware.MetricsAware;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
@@ -39,7 +39,7 @@ import java.util.List;
* @author yanhom
* @since 1.0.0
**/
-@Endpoint(id = "dynamic-tp")
+@Endpoint(id = "dynamictp")
public class DtpEndpoint {
@ReadOperation
@@ -51,7 +51,7 @@ public class DtpEndpoint {
metricsList.add(ExecutorConverter.toMetrics(wrapper));
});
- val handlerMap = ApplicationContextHolder.getBeansOfType(MetricsAware.class);
+ val handlerMap = ContextManagerHelper.getBeansOfType(MetricsAware.class);
if (MapUtils.isNotEmpty(handlerMap)) {
handlerMap.forEach((k, v) -> metricsList.addAll(v.getMultiPoolStats()));
}
diff --git a/starter/starter-common/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/starter/starter-common/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index 84dc5ef5ca78b765bb69e24a5a998951a00f8f59..cd5cc1f5ab64b9755a195492277017c661c20158 100644
--- a/starter/starter-common/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/starter/starter-common/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -1,466 +1,524 @@
{
"groups": [
{
- "name": "spring.dynamic.tp",
+ "name": "dynamictp",
"type": "org.dromara.dynamictp.common.properties.DtpProperties",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.etcd",
+ "name": "dynamictp.etcd",
"type": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.jetty-tp",
+ "name": "dynamictp.jetty-tp",
"type": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.tomcat-tp",
+ "name": "dynamictp.tomcat-tp",
"type": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.undertow-tp",
+ "name": "dynamictp.undertow-tp",
"type": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.zookeeper",
+ "name": "dynamictp.zookeeper",
"type": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
}
],
"properties": [
{
- "name": "spring.dynamic.tp.brpc-tp",
+ "name": "dynamictp.brpc-tp",
"type": "java.util.List",
"description": "Brpc thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.collector-types",
+ "name": "dynamictp.collector-types",
"type": "java.util.List",
"description": "Metrics collector types, default is logging. see {@link CollectorTypeEnum}",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.config-type",
+ "name": "dynamictp.config-type",
"type": "java.lang.String",
"description": "Config file type, for zookeeper and etcd.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.dubbo-tp",
+ "name": "dynamictp.dubbo-tp",
"type": "java.util.List",
"description": "Dubbo thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.enabled",
+ "name": "dynamictp.enabled",
"type": "java.lang.Boolean",
"description": "If enabled DynamicTp.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.enabled-banner",
+ "name": "dynamictp.enabled-banner",
"type": "java.lang.Boolean",
"description": "If print banner.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.enabled-collect",
+ "name": "dynamictp.enabled-collect",
"type": "java.lang.Boolean",
"description": "If enabled metrics collect.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.etcd.auth-enable",
+ "name": "dynamictp.etcd.auth-enable",
"type": "java.lang.Boolean",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd",
"defaultValue": false
},
{
- "name": "spring.dynamic.tp.etcd.authority",
+ "name": "dynamictp.etcd.authority",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd",
"defaultValue": "ssl"
},
{
- "name": "spring.dynamic.tp.etcd.charset",
+ "name": "dynamictp.etcd.charset",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd",
"defaultValue": "UTF-8"
},
{
- "name": "spring.dynamic.tp.etcd.endpoints",
+ "name": "dynamictp.etcd.endpoints",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd"
},
{
- "name": "spring.dynamic.tp.etcd.key",
+ "name": "dynamictp.etcd.key",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd"
},
{
- "name": "spring.dynamic.tp.etcd.password",
+ "name": "dynamictp.etcd.password",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd"
},
{
- "name": "spring.dynamic.tp.etcd.user",
+ "name": "dynamictp.etcd.user",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Etcd"
},
{
- "name": "spring.dynamic.tp.executors",
+ "name": "dynamictp.executors",
"type": "java.util.List",
"description": "ThreadPoolExecutor configs.",
"sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
},
{
- "name": "spring.dynamic.tp.grpc-tp",
+ "name": "dynamictp.grpc-tp",
"type": "java.util.List",
"description": "Grpc thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.hystrix-tp",
+ "name": "dynamictp.hystrix-tp",
"type": "java.util.List",
"description": "Hystrix thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.jetty-tp.aware-names",
+ "name": "dynamictp.jetty-tp.aware-names",
"type": "java.util.List",
"description": "Aware names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.core-pool-size",
+ "name": "dynamictp.jetty-tp.core-pool-size",
"type": "java.lang.Integer",
"description": "CoreSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 1
},
{
- "name": "spring.dynamic.tp.jetty-tp.keep-alive-time",
+ "name": "dynamictp.jetty-tp.keep-alive-time",
"type": "java.lang.Long",
"description": "When the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 60
},
{
- "name": "spring.dynamic.tp.jetty-tp.maximum-pool-size",
+ "name": "dynamictp.jetty-tp.maximum-pool-size",
"type": "java.lang.Integer",
"description": "MaxSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.notify-enabled",
+ "name": "dynamictp.jetty-tp.notify-enabled",
"type": "java.lang.Boolean",
"description": "If enable notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.jetty-tp.notify-items",
+ "name": "dynamictp.jetty-tp.notify-items",
"type": "java.util.List",
"description": "Notify items, see {@link NotifyItemEnum}",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.platform-ids",
+ "name": "dynamictp.jetty-tp.platform-ids",
"type": "java.util.List",
"description": "Notify platform id",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.queue-timeout",
+ "name": "dynamictp.jetty-tp.queue-timeout",
"type": "java.lang.Long",
"description": "Task queue wait timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.jetty-tp.run-timeout",
+ "name": "dynamictp.jetty-tp.run-timeout",
"type": "java.lang.Long",
"description": "Task execute timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.jetty-tp.task-wrapper-names",
+ "name": "dynamictp.jetty-tp.task-wrapper-names",
"type": "java.util.Set",
"description": "Task wrapper names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.thread-pool-alias-name",
+ "name": "dynamictp.jetty-tp.thread-pool-alias-name",
"type": "java.lang.String",
"description": "Simple Alias Name of ThreadPool. Use for notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.thread-pool-name",
+ "name": "dynamictp.jetty-tp.thread-pool-name",
"type": "java.lang.String",
"description": "Name of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.jetty-tp.unit",
+ "name": "dynamictp.jetty-tp.unit",
"type": "java.util.concurrent.TimeUnit",
"description": "Timeout unit.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.log-path",
+ "name": "dynamictp.log-path",
"type": "java.lang.String",
"description": "Metrics log storage path, just for \"logging\" type.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.monitor-interval",
+ "name": "dynamictp.monitor-interval",
"type": "java.lang.Integer",
"description": "Monitor interval, time unit(s)",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties",
"defaultValue": 5
},
{
- "name": "spring.dynamic.tp.motan-tp",
+ "name": "dynamictp.motan-tp",
"type": "java.util.List",
"description": "Motan server thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.okhttp3-tp",
+ "name": "dynamictp.okhttp3-tp",
"type": "java.util.List",
"description": "Okhttp3 thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.platforms",
+ "name": "dynamictp.platforms",
"type": "java.util.List",
"description": "Notify platform configs.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.rabbitmq-tp",
+ "name": "dynamictp.rabbitmq-tp",
"type": "java.util.List",
"description": "Rabbitmq thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.rocket-mq-tp",
+ "name": "dynamictp.rocket-mq-tp",
"type": "java.util.List",
"description": "RocketMq thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.sofa-tp",
+ "name": "dynamictp.sofa-tp",
"type": "java.util.List",
"description": "Sofa thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.tars-tp",
+ "name": "dynamictp.tars-tp",
"type": "java.util.List",
"description": "Tars thread pools.",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.aware-names",
+ "name": "dynamictp.tomcat-tp.aware-names",
"type": "java.util.List",
"description": "Aware names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.core-pool-size",
+ "name": "dynamictp.tomcat-tp.core-pool-size",
"type": "java.lang.Integer",
"description": "CoreSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 1
},
{
- "name": "spring.dynamic.tp.tomcat-tp.keep-alive-time",
+ "name": "dynamictp.tomcat-tp.keep-alive-time",
"type": "java.lang.Long",
"description": "When the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 60
},
{
- "name": "spring.dynamic.tp.tomcat-tp.maximum-pool-size",
+ "name": "dynamictp.tomcat-tp.maximum-pool-size",
"type": "java.lang.Integer",
"description": "MaxSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.notify-enabled",
+ "name": "dynamictp.tomcat-tp.notify-enabled",
"type": "java.lang.Boolean",
"description": "If enable notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.tomcat-tp.notify-items",
+ "name": "dynamictp.tomcat-tp.notify-items",
"type": "java.util.List",
"description": "Notify items, see {@link NotifyItemEnum}",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.platform-ids",
+ "name": "dynamictp.tomcat-tp.platform-ids",
"type": "java.util.List",
"description": "Notify platform id",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.queue-timeout",
+ "name": "dynamictp.tomcat-tp.queue-timeout",
"type": "java.lang.Long",
"description": "Task queue wait timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.tomcat-tp.run-timeout",
+ "name": "dynamictp.tomcat-tp.run-timeout",
"type": "java.lang.Long",
"description": "Task execute timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.tomcat-tp.task-wrapper-names",
+ "name": "dynamictp.tomcat-tp.task-wrapper-names",
"type": "java.util.Set",
"description": "Task wrapper names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.thread-pool-alias-name",
+ "name": "dynamictp.tomcat-tp.thread-pool-alias-name",
"type": "java.lang.String",
"description": "Simple Alias Name of ThreadPool. Use for notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.thread-pool-name",
+ "name": "dynamictp.tomcat-tp.thread-pool-name",
"type": "java.lang.String",
"description": "Name of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.tomcat-tp.unit",
+ "name": "dynamictp.tomcat-tp.unit",
"type": "java.util.concurrent.TimeUnit",
"description": "Timeout unit.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.aware-names",
+ "name": "dynamictp.undertow-tp.aware-names",
"type": "java.util.List",
"description": "Aware names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.core-pool-size",
+ "name": "dynamictp.undertow-tp.core-pool-size",
"type": "java.lang.Integer",
"description": "CoreSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 1
},
{
- "name": "spring.dynamic.tp.undertow-tp.keep-alive-time",
+ "name": "dynamictp.undertow-tp.keep-alive-time",
"type": "java.lang.Long",
"description": "When the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 60
},
{
- "name": "spring.dynamic.tp.undertow-tp.maximum-pool-size",
+ "name": "dynamictp.undertow-tp.maximum-pool-size",
"type": "java.lang.Integer",
"description": "MaxSize of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.notify-enabled",
+ "name": "dynamictp.undertow-tp.notify-enabled",
"type": "java.lang.Boolean",
"description": "If enable notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": true
},
{
- "name": "spring.dynamic.tp.undertow-tp.notify-items",
+ "name": "dynamictp.undertow-tp.notify-items",
"type": "java.util.List",
"description": "Notify items, see {@link NotifyItemEnum}",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.platform-ids",
+ "name": "dynamictp.undertow-tp.platform-ids",
"type": "java.util.List",
"description": "Notify platform id",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.queue-timeout",
+ "name": "dynamictp.undertow-tp.queue-timeout",
"type": "java.lang.Long",
"description": "Task queue wait timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.undertow-tp.run-timeout",
+ "name": "dynamictp.undertow-tp.run-timeout",
"type": "java.lang.Long",
"description": "Task execute timeout, unit (ms), just for statistics.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps",
"defaultValue": 0
},
{
- "name": "spring.dynamic.tp.undertow-tp.task-wrapper-names",
+ "name": "dynamictp.undertow-tp.task-wrapper-names",
"type": "java.util.Set",
"description": "Task wrapper names.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.thread-pool-alias-name",
+ "name": "dynamictp.undertow-tp.thread-pool-alias-name",
"type": "java.lang.String",
"description": "Simple Alias Name of ThreadPool. Use for notify.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.thread-pool-name",
+ "name": "dynamictp.undertow-tp.thread-pool-name",
"type": "java.lang.String",
"description": "Name of ThreadPool.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.undertow-tp.unit",
+ "name": "dynamictp.undertow-tp.unit",
"type": "java.util.concurrent.TimeUnit",
"description": "Timeout unit.",
"sourceType": "org.dromara.dynamictp.common.entity.TpExecutorProps"
},
{
- "name": "spring.dynamic.tp.zookeeper.config-key",
+ "name": "dynamictp.zookeeper.config-key",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper"
},
{
- "name": "spring.dynamic.tp.zookeeper.config-version",
+ "name": "dynamictp.zookeeper.config-version",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper"
},
{
- "name": "spring.dynamic.tp.zookeeper.node",
+ "name": "dynamictp.zookeeper.node",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper"
},
{
- "name": "spring.dynamic.tp.zookeeper.root-node",
+ "name": "dynamictp.zookeeper.root-node",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper"
},
{
- "name": "spring.dynamic.tp.zookeeper.zk-connect-str",
+ "name": "dynamictp.zookeeper.zk-connect-str",
"type": "java.lang.String",
"sourceType": "org.dromara.dynamictp.common.properties.DtpProperties$Zookeeper"
+ },
+ {
+ "name": "dynamictp.env",
+ "type": "java.lang.String",
+ "description": "Environment, if not set, will use \"spring.profiles.active\".",
+ "sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
+ },
+ {
+ "name": "dynamictp.global-executor-props",
+ "type": "org.dromara.dynamictp.common.entity.DtpExecutorProps",
+ "description": "ThreadPoolExecutor global configs.",
+ "sourceType": "org.dromara.dynamictp.common.properties.DtpProperties"
+ },
+ {
+ "name": "dynamictp.global-executor-props.executor-type",
+ "type": "java.lang.String",
+ "description": "ThreadPoolExecutor type, see {@link ExecutorType}",
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props.queue-type",
+ "type": "java.lang.String",
+ "description": "ThreadPoolExecutor queue type, see {@link QueueTypeEnum}",
+ "defaultValue": "VariableLinkedBlockingQueue",
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props.fair",
+ "type": "java.lang.Boolean",
+ "description": "ThreadPoolExecutor fair.",
+ "defaultValue": false,
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props.pre-start-all-core-threads",
+ "type": "java.lang.Boolean",
+ "description": "ThreadPoolExecutor pre start all core threads.",
+ "defaultValue": false,
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props.plugin-names",
+ "type": "java.util.Set",
+ "description": "ThreadPoolExecutor plugin names.",
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props.auto-create",
+ "type": "java.lang.Boolean",
+ "description": "ThreadPoolExecutor auto create.",
+ "defaultValue": true,
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
+ },
+ {
+ "name": "dynamictp.global-executor-props",
+ "type": "org.dromara.dynamictp.common.entity.DtpExecutorProps",
+ "description": "global executor configs.",
+ "sourceType": "org.dromara.dynamictp.common.entity.DtpExecutorProps"
}
],
"hints": []
diff --git a/starter/starter-common/src/main/resources/META-INF/services/org.dromara.dynamictp.core.spring.PropertiesBinder b/starter/starter-common/src/main/resources/META-INF/services/org.dromara.dynamictp.core.support.binder.PropertiesBinder
similarity index 100%
rename from starter/starter-common/src/main/resources/META-INF/services/org.dromara.dynamictp.core.spring.PropertiesBinder
rename to starter/starter-common/src/main/resources/META-INF/services/org.dromara.dynamictp.core.support.binder.PropertiesBinder
diff --git a/starter/starter-configcenter/cloud-starter-consul/pom.xml b/starter/starter-configcenter/cloud-starter-consul/pom.xml
index 4c3782df5cfbcd3f6656dbd995b2d01d1864f31e..351885f02f119357ea03aefab0bf88565e9b4f72 100644
--- a/starter/starter-configcenter/cloud-starter-consul/pom.xml
+++ b/starter/starter-configcenter/cloud-starter-consul/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-cloud-starter-consul
diff --git a/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/autoconfigure/DtpConsulAutoConfiguration.java b/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/autoconfigure/DtpConsulAutoConfiguration.java
index 190572fb8255cf656eda3a7ab5ed656d0a7c8d2b..6ae2b305c74d78e060361ce43bdcb069fc1eba6a 100644
--- a/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/autoconfigure/DtpConsulAutoConfiguration.java
+++ b/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/autoconfigure/DtpConsulAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.cloud.consul.autoconfigure;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.cloud.consul.refresher.CloudConsulRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/refresher/CloudConsulRefresher.java b/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/refresher/CloudConsulRefresher.java
index 31edd80de0841220a042c7e3a6afd6912b80f9b2..0721efc39fd2bf9d8d7aeb2422ad125a576a0a17 100644
--- a/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/refresher/CloudConsulRefresher.java
+++ b/starter/starter-configcenter/cloud-starter-consul/src/main/java/org/dromara/dynamictp/starter/cloud/consul/refresher/CloudConsulRefresher.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.consul.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -29,7 +29,7 @@ import org.springframework.lang.NonNull;
* @author Redick01
*/
@Slf4j
-public class CloudConsulRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class CloudConsulRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public CloudConsulRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/cloud-starter-huawei/pom.xml b/starter/starter-configcenter/cloud-starter-huawei/pom.xml
index 2ad077cda8872a76210fac88eb79dc7446bdaa09..486f762e4a0a40432111d5c517da1c0e3471b062 100644
--- a/starter/starter-configcenter/cloud-starter-huawei/pom.xml
+++ b/starter/starter-configcenter/cloud-starter-huawei/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
diff --git a/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/autoconfigure/DtpHuaweiAutoConfiguration.java b/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/autoconfigure/DtpHuaweiAutoConfiguration.java
index c6f451953803010de418bc58ff05a67c932789f7..5d4f7702b43ab41c5a60cce57c2a2d9dc42a4b98 100644
--- a/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/autoconfigure/DtpHuaweiAutoConfiguration.java
+++ b/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/autoconfigure/DtpHuaweiAutoConfiguration.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.huawei.autoconfigure;
import com.huaweicloud.common.configration.bootstrap.ConfigBootstrapProperties;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.cloud.huawei.refresher.CloudHuaweiRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/refresher/CloudHuaweiRefresher.java b/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/refresher/CloudHuaweiRefresher.java
index 3e637c68de29edad45f0297ebff271bccc2871bd..eeaca9e928cc03fbb560df7c0cded53dc11a9874 100644
--- a/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/refresher/CloudHuaweiRefresher.java
+++ b/starter/starter-configcenter/cloud-starter-huawei/src/main/java/org/dromara/dynamictp/starter/cloud/huawei/refresher/CloudHuaweiRefresher.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.huawei.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -29,7 +29,7 @@ import org.springframework.lang.NonNull;
* @author windsearcher
*/
@Slf4j
-public class CloudHuaweiRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class CloudHuaweiRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public CloudHuaweiRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/cloud-starter-nacos/pom.xml b/starter/starter-configcenter/cloud-starter-nacos/pom.xml
index 035de2112faf9723736a4a718692760b6bbcde56..6e1257208b54b9ba2091fb508b19540ebffca6b5 100644
--- a/starter/starter-configcenter/cloud-starter-nacos/pom.xml
+++ b/starter/starter-configcenter/cloud-starter-nacos/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-cloud-starter-nacos
diff --git a/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/autoconfigure/DtpCloudNacosAutoConfiguration.java b/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/autoconfigure/DtpCloudNacosAutoConfiguration.java
index 23b45a3b2f9da1c628950556774cb4b594986bcf..9a67ceef946e77c6f6e8bad6e748fec85ff8dfb1 100644
--- a/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/autoconfigure/DtpCloudNacosAutoConfiguration.java
+++ b/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/autoconfigure/DtpCloudNacosAutoConfiguration.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.starter.cloud.nacos.autoconfigure;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.cloud.nacos.refresher.CloudNacosRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/refresher/CloudNacosRefresher.java b/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/refresher/CloudNacosRefresher.java
index 8da6c6e0350122bcf95c21635b45228d2b6ce5ef..555e2fc0682ff82a36af2da0866007709f4aa910 100644
--- a/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/refresher/CloudNacosRefresher.java
+++ b/starter/starter-configcenter/cloud-starter-nacos/src/main/java/org/dromara/dynamictp/starter/cloud/nacos/refresher/CloudNacosRefresher.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.nacos.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -32,7 +32,7 @@ import org.springframework.lang.NonNull;
* @since 1.0.0
**/
@Slf4j
-public class CloudNacosRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class CloudNacosRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public CloudNacosRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/cloud-starter-polaris/pom.xml b/starter/starter-configcenter/cloud-starter-polaris/pom.xml
index dba6b76c89455fef624cfe9e1def2b307fe3baef..6addfedf9077d08123bfd8747288b4dbeb163c5c 100644
--- a/starter/starter-configcenter/cloud-starter-polaris/pom.xml
+++ b/starter/starter-configcenter/cloud-starter-polaris/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-cloud-starter-polaris
diff --git a/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/autoconfigure/DtpPolarisAutoConfiguration.java b/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/autoconfigure/DtpPolarisAutoConfiguration.java
index f1b3ed98e29c26b5f00de9089b100ba7d8c2ef92..d81c6f5bcdb116b3ca2dcc8ce56a8ac533ab48aa 100644
--- a/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/autoconfigure/DtpPolarisAutoConfiguration.java
+++ b/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/autoconfigure/DtpPolarisAutoConfiguration.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.polaris.autoconfigure;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.cloud.polaris.refresher.CloudPolarisRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/refresher/CloudPolarisRefresher.java b/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/refresher/CloudPolarisRefresher.java
index 3c6d1d9672c729298b03fadb4f6374e800cbe5da..713504ed4d203910d65ddcddedee0d0b61c4b5bd 100644
--- a/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/refresher/CloudPolarisRefresher.java
+++ b/starter/starter-configcenter/cloud-starter-polaris/src/main/java/org/dromara/dynamictp/starter/cloud/polaris/refresher/CloudPolarisRefresher.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.polaris.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -32,7 +32,7 @@ import org.springframework.lang.NonNull;
* @since 1.0.0
**/
@Slf4j
-public class CloudPolarisRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class CloudPolarisRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public CloudPolarisRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/cloud-starter-zookeeper/pom.xml b/starter/starter-configcenter/cloud-starter-zookeeper/pom.xml
index 21cfda1e4d098187832c8d9bfd7cf53ebab86380..ff568d685c028d888088eab1a5da8bf3ec4764b9 100644
--- a/starter/starter-configcenter/cloud-starter-zookeeper/pom.xml
+++ b/starter/starter-configcenter/cloud-starter-zookeeper/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-cloud-starter-zookeeper
diff --git a/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/autoconfigure/DtpCloudZkAutoConfiguration.java b/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/autoconfigure/DtpCloudZkAutoConfiguration.java
index 5ced916418214be701d5f317d8d4df01d373d654..67576fabc97a7dee22bf7c8747a9fb30e2c2e5cb 100644
--- a/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/autoconfigure/DtpCloudZkAutoConfiguration.java
+++ b/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/autoconfigure/DtpCloudZkAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.cloud.zookeeper.autoconfigure;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.cloud.zookeeper.refresher.CloudZookeeperRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/refresher/CloudZookeeperRefresher.java b/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/refresher/CloudZookeeperRefresher.java
index bb9e0e175432416feea44bf62e53e7110361f596..203ab54b543a791ea665aba5d6d3e1cc27b0a512 100644
--- a/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/refresher/CloudZookeeperRefresher.java
+++ b/starter/starter-configcenter/cloud-starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/cloud/zookeeper/refresher/CloudZookeeperRefresher.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.cloud.zookeeper.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -29,7 +29,7 @@ import org.springframework.lang.NonNull;
* @author Redick01
*/
@Slf4j
-public class CloudZookeeperRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class CloudZookeeperRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public CloudZookeeperRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/pom.xml b/starter/starter-configcenter/pom.xml
index 6ccbd2f9b1f90eb8e17f95345df52c1379bbfe35..5bdc79ac57ce5879eb64952ce4f78fb8271a84c5 100644
--- a/starter/starter-configcenter/pom.xml
+++ b/starter/starter-configcenter/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter
- ${revision}
+ 1.2.1
../pom.xml
diff --git a/starter/starter-configcenter/starter-apollo/pom.xml b/starter/starter-configcenter/starter-apollo/pom.xml
index c20906e5ebbcbc2344a6cbbb2e3a9c7e79d12f34..c8e2b158f7acfbcd3368ba4db6602505d8131dc8 100644
--- a/starter/starter-configcenter/starter-apollo/pom.xml
+++ b/starter/starter-configcenter/starter-apollo/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-apollo
diff --git a/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/autoconfigure/DtpApolloAutoConfiguration.java b/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/autoconfigure/DtpApolloAutoConfiguration.java
index 563f4d8f4ee649640720859f84f69cf1d38fa900..91af3f8d08aeacb9bc6e1edbb1037c96bf29894a 100644
--- a/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/autoconfigure/DtpApolloAutoConfiguration.java
+++ b/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/autoconfigure/DtpApolloAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.apollo.autoconfigure;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.apollo.refresher.ApolloRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/refresher/ApolloRefresher.java b/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/refresher/ApolloRefresher.java
index 934495d9bcf487aa77f59dfe8f0b62099d18ce94..78a8e40709617ad2ca3aa374ccd69f73fcac92e8 100644
--- a/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/refresher/ApolloRefresher.java
+++ b/starter/starter-configcenter/starter-apollo/src/main/java/org/dromara/dynamictp/starter/apollo/refresher/ApolloRefresher.java
@@ -30,7 +30,7 @@ import lombok.val;
import org.dromara.dynamictp.common.em.ConfigFileTypeEnum;
import org.dromara.dynamictp.common.properties.DtpProperties;
import org.dromara.dynamictp.core.handler.ConfigHandler;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.beans.factory.InitializingBean;
import java.io.IOException;
@@ -46,7 +46,7 @@ import static org.dromara.dynamictp.common.constant.DynamicTpConst.MAIN_PROPERTI
* @since 1.0.0
**/
@Slf4j
-public class ApolloRefresher extends AbstractRefresher implements ConfigFileChangeListener, InitializingBean {
+public class ApolloRefresher extends AbstractSpringRefresher implements ConfigFileChangeListener, InitializingBean {
private static final Splitter NAMESPACE_SPLITTER = Splitter.on(",").omitEmptyStrings().trimResults();
diff --git a/starter/starter-configcenter/starter-etcd/pom.xml b/starter/starter-configcenter/starter-etcd/pom.xml
index de05a1aaaa41ea6bb65a34456af700ecc866f155..ddee363fd1b64fd2538f156e796aff7ebfa61500 100644
--- a/starter/starter-configcenter/starter-etcd/pom.xml
+++ b/starter/starter-configcenter/starter-etcd/pom.xml
@@ -5,7 +5,7 @@
dynamic-tp-starter-configcenter
org.dromara.dynamictp
- ${revision}
+ 1.2.1
../pom.xml
4.0.0
diff --git a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/DtpEtcdAutoConfiguration.java b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/DtpEtcdAutoConfiguration.java
index 426a53e9f14e5682a9904fd692353817711520e2..d3ab5940e3b81407e5037e07902fb3b8e3d688de 100644
--- a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/DtpEtcdAutoConfiguration.java
+++ b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/DtpEtcdAutoConfiguration.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.etcd.autoconfigure;
import io.etcd.jetcd.Client;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.etcd.refresher.EtcdRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/EtcdConfigEnvironmentProcessor.java b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/EtcdConfigEnvironmentProcessor.java
index b25cea3ec825a560f323285a17c887d76050d74f..321e4a9a439010abfb9f16c49dcf1dfd68ff296a 100644
--- a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/EtcdConfigEnvironmentProcessor.java
+++ b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/autoconfigure/EtcdConfigEnvironmentProcessor.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.starter.etcd.autoconfigure;
import lombok.SneakyThrows;
import lombok.val;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
import org.dromara.dynamictp.starter.etcd.util.EtcdUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
diff --git a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdListener.java b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdListener.java
index ebcf8dcbb923e02ebc569d5c2ed222749c5e4740..d0a59725961d515d45403063b58e658423706cd4 100644
--- a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdListener.java
+++ b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdListener.java
@@ -24,7 +24,7 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
import org.dromara.dynamictp.starter.etcd.util.EtcdUtil;
/**
diff --git a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdRefresher.java b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdRefresher.java
index 1798b2ac60295e65f04277485e812d3608957c79..f1fd4d9dc2a515b85f3cf3b12062654f6d757bfd 100644
--- a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdRefresher.java
+++ b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/refresher/EtcdRefresher.java
@@ -19,8 +19,8 @@ package org.dromara.dynamictp.starter.etcd.refresher;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.dromara.dynamictp.starter.etcd.util.EtcdUtil;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
@@ -32,7 +32,7 @@ import java.util.Map;
* @author Redick01
*/
@Slf4j
-public class EtcdRefresher extends AbstractRefresher implements InitializingBean, Ordered, DisposableBean {
+public class EtcdRefresher extends AbstractSpringRefresher implements InitializingBean, Ordered, DisposableBean {
public EtcdRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/util/EtcdUtil.java b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/util/EtcdUtil.java
index 8d71b47849d6c9fcd306af2287c80d178dfd9329..2538e46769d8e1fdb2f9ba172c5bed238f0f46da 100644
--- a/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/util/EtcdUtil.java
+++ b/starter/starter-configcenter/starter-etcd/src/main/java/org/dromara/dynamictp/starter/etcd/util/EtcdUtil.java
@@ -39,6 +39,7 @@ import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.concurrent.TimeUnit;
/**
* @author Redick01
@@ -97,7 +98,7 @@ public final class EtcdUtil {
KeyValue keyValue = client(etcd)
.getKVClient()
.get(bytesOf(etcd.getKey()))
- .get()
+ .get(etcd.getTimeout(), TimeUnit.MILLISECONDS)
.getKvs()
.get(0);
if (Objects.isNull(keyValue)) {
@@ -111,7 +112,7 @@ public final class EtcdUtil {
GetResponse response = client(etcd)
.getKVClient()
.get(key, getOption)
- .get();
+ .get(etcd.getTimeout(), TimeUnit.MILLISECONDS);
List keyValues = response.getKvs();
Map finalResultMap = resultMap;
keyValues.forEach(keyValue -> {
diff --git a/starter/starter-configcenter/starter-nacos/pom.xml b/starter/starter-configcenter/starter-nacos/pom.xml
index 23eab1472e85b21868f3074f18cc4691908b762c..b45777150b8d50864ebdd4c581792eaf07b55b65 100644
--- a/starter/starter-configcenter/starter-nacos/pom.xml
+++ b/starter/starter-configcenter/starter-nacos/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-nacos
diff --git a/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/autoconfigure/DtpNacosAutoConfiguration.java b/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/autoconfigure/DtpNacosAutoConfiguration.java
index 541c9b699827f4d6784b00bd4d24ce59820cffcb..2b2f94a754bd05d5d2313325820b9e9d7e64f46f 100644
--- a/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/autoconfigure/DtpNacosAutoConfiguration.java
+++ b/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/autoconfigure/DtpNacosAutoConfiguration.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.nacos.autoconfigure;
import org.dromara.dynamictp.common.properties.DtpProperties;
import com.alibaba.boot.nacos.config.properties.NacosConfigProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.nacos.refresher.NacosRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/refresher/NacosRefresher.java b/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/refresher/NacosRefresher.java
index aab757b80a26370e29aa561b650e6e44c07e2484..1bacb18446045b6e83c7b5ea969f551ab4d646d9 100644
--- a/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/refresher/NacosRefresher.java
+++ b/starter/starter-configcenter/starter-nacos/src/main/java/org/dromara/dynamictp/starter/nacos/refresher/NacosRefresher.java
@@ -20,7 +20,7 @@ package org.dromara.dynamictp.starter.nacos.refresher;
import com.alibaba.nacos.spring.context.event.config.NacosConfigEvent;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
@@ -31,7 +31,7 @@ import org.springframework.context.event.SmartApplicationListener;
* @since 1.0.0
**/
@Slf4j
-public class NacosRefresher extends AbstractRefresher implements SmartApplicationListener {
+public class NacosRefresher extends AbstractSpringRefresher implements SmartApplicationListener {
public NacosRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-configcenter/starter-zookeeper/pom.xml b/starter/starter-configcenter/starter-zookeeper/pom.xml
index fe28ec30f1ead7f00e28e49d32b915bd731d1dbf..5c985756179660e72150ce26bec218cbf7919b2f 100644
--- a/starter/starter-configcenter/starter-zookeeper/pom.xml
+++ b/starter/starter-configcenter/starter-zookeeper/pom.xml
@@ -6,7 +6,7 @@
org.dromara.dynamictp
dynamic-tp-starter-configcenter
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-zookeeper
@@ -27,5 +27,9 @@
+
+ org.dromara.dynamictp
+ dynamic-tp-spring
+
\ No newline at end of file
diff --git a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/DtpZkAutoConfiguration.java b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/DtpZkAutoConfiguration.java
index b5752fc4b0ec0249c73def0436ddb518887d0e2a..97df7e86bb577eaf9d472d8a4d88c67a6c38404d 100644
--- a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/DtpZkAutoConfiguration.java
+++ b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/DtpZkAutoConfiguration.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.starter.zookeeper.autoconfigure;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
import org.dromara.dynamictp.starter.zookeeper.refresher.ZookeeperRefresher;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/ZkConfigEnvironmentProcessor.java b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/ZkConfigEnvironmentProcessor.java
index 345b2fed5ff9906669b7a9dd9849ae066a4b337f..3bdf793d0b79c1623e3aeb53d671e833221fb841 100644
--- a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/ZkConfigEnvironmentProcessor.java
+++ b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/autoconfigure/ZkConfigEnvironmentProcessor.java
@@ -19,7 +19,7 @@ package org.dromara.dynamictp.starter.zookeeper.autoconfigure;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
import org.dromara.dynamictp.starter.zookeeper.util.CuratorUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
diff --git a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/refresher/ZookeeperRefresher.java b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/refresher/ZookeeperRefresher.java
index fa6b878b35cf456f10ca8366febbcd7f4113c830..961770bd2194b8788d7315d2e9696f2804fb9509 100644
--- a/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/refresher/ZookeeperRefresher.java
+++ b/starter/starter-configcenter/starter-zookeeper/src/main/java/org/dromara/dynamictp/starter/zookeeper/refresher/ZookeeperRefresher.java
@@ -24,7 +24,7 @@ import org.apache.curator.framework.state.ConnectionState;
import org.apache.curator.framework.state.ConnectionStateListener;
import org.apache.zookeeper.WatchedEvent;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.dromara.dynamictp.spring.AbstractSpringRefresher;
import org.dromara.dynamictp.starter.zookeeper.autoconfigure.ZkConfigEnvironmentProcessor;
import org.dromara.dynamictp.starter.zookeeper.util.CuratorUtil;
import org.springframework.beans.factory.InitializingBean;
@@ -36,7 +36,7 @@ import org.springframework.core.env.Environment;
* @author Redick01
*/
@Slf4j
-public class ZookeeperRefresher extends AbstractRefresher implements EnvironmentAware, InitializingBean {
+public class ZookeeperRefresher extends AbstractSpringRefresher implements EnvironmentAware, InitializingBean {
public ZookeeperRefresher(DtpProperties dtpProperties) {
super(dtpProperties);
diff --git a/starter/starter-extension/pom.xml b/starter/starter-extension/pom.xml
index 2dd0a890bb45906105b55e74dc713fa3108c189e..ad83ca3beb2e8c37d42d3cb22d3cb2de9766ca9f 100644
--- a/starter/starter-extension/pom.xml
+++ b/starter/starter-extension/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter
- ${revision}
+ 1.2.1
../pom.xml
diff --git a/starter/starter-extension/starter-extension-limiter-redis/pom.xml b/starter/starter-extension/starter-extension-limiter-redis/pom.xml
index 1c26ef2a2bc2051155200f418b0a6995e09d69c6..d657fa4a614c7f34423274c7d92c193b61b127aa 100644
--- a/starter/starter-extension/starter-extension-limiter-redis/pom.xml
+++ b/starter/starter-extension/starter-extension-limiter-redis/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-starter-extension
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-spring-boot-starter-extension-limiter-redis
diff --git a/starter/starter-extension/starter-extension-limiter-redis/src/main/java/org/dromara/dynamictp/starter/extension/limiter/redis/autoconfigure/RedisLimiterAutoConfiguration.java b/starter/starter-extension/starter-extension-limiter-redis/src/main/java/org/dromara/dynamictp/starter/extension/limiter/redis/autoconfigure/RedisLimiterAutoConfiguration.java
index a3fe0b6232b291c5753b990aad5244956dbe68f7..9519800fdbb78676e6bea0dfddb10ac0655d7528 100644
--- a/starter/starter-extension/starter-extension-limiter-redis/src/main/java/org/dromara/dynamictp/starter/extension/limiter/redis/autoconfigure/RedisLimiterAutoConfiguration.java
+++ b/starter/starter-extension/starter-extension-limiter-redis/src/main/java/org/dromara/dynamictp/starter/extension/limiter/redis/autoconfigure/RedisLimiterAutoConfiguration.java
@@ -17,8 +17,8 @@
package org.dromara.dynamictp.starter.extension.limiter.redis.autoconfigure;
-import org.dromara.dynamictp.extension.limiter.redis.ratelimiter.NotifyRedisRateLimiterFilter;
import org.dromara.dynamictp.extension.limiter.redis.ratelimiter.RedisRateLimiter;
+import org.dromara.dynamictp.extension.limiter.redis.ratelimiter.RedisRateLimiterNotifyFilter;
import org.dromara.dynamictp.extension.limiter.redis.ratelimiter.SlidingWindowRateLimiter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -46,7 +46,7 @@ public class RedisLimiterAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public NotifyRedisRateLimiterFilter notifyRedisRateLimiterFilter() {
- return new NotifyRedisRateLimiterFilter();
+ public RedisRateLimiterNotifyFilter redisRateLimiterNotifyFilter() {
+ return new RedisRateLimiterNotifyFilter();
}
}
diff --git a/starter/starter-extension/starter-extension-notify-email/pom.xml b/starter/starter-extension/starter-extension-notify-email/pom.xml
index d53725bb9759cef9d6a5f4b6725f547450596764..703cca3d575f6c506c0cddf71b6a787e98852231 100644
--- a/starter/starter-extension/starter-extension-notify-email/pom.xml
+++ b/starter/starter-extension/starter-extension-notify-email/pom.xml
@@ -5,7 +5,7 @@
dynamic-tp-starter-extension
org.dromara.dynamictp
- ${revision}
+ 1.2.1
../pom.xml
4.0.0
diff --git a/starter/starter-extension/starter-extension-notify-email/src/main/java/org/dromara/dynamictp/start/extension/notify/email/autoconfigure/NotifyEmailAutoConfiguration.java b/starter/starter-extension/starter-extension-notify-email/src/main/java/org/dromara/dynamictp/start/extension/notify/email/autoconfigure/NotifyEmailAutoConfiguration.java
index aabceed42b58898f6c2886917a1ecde0f75f96df..21a31be5fdd9335bc1a1c6719c419a610d48d49c 100644
--- a/starter/starter-extension/starter-extension-notify-email/src/main/java/org/dromara/dynamictp/start/extension/notify/email/autoconfigure/NotifyEmailAutoConfiguration.java
+++ b/starter/starter-extension/starter-extension-notify-email/src/main/java/org/dromara/dynamictp/start/extension/notify/email/autoconfigure/NotifyEmailAutoConfiguration.java
@@ -48,5 +48,4 @@ public class NotifyEmailAutoConfiguration {
public DtpNotifier dtpEmailNotifier() {
return new DtpEmailNotifier();
}
-
}
diff --git a/starter/starter-extension/starter-extension-notify-yunzhijia/pom.xml b/starter/starter-extension/starter-extension-notify-yunzhijia/pom.xml
index 925d004db60b6f4c20efc3e8361e117cbeb8f222..7d4d3e6a98cfc6c29d762be927f7e8605a1f7aa8 100644
--- a/starter/starter-extension/starter-extension-notify-yunzhijia/pom.xml
+++ b/starter/starter-extension/starter-extension-notify-yunzhijia/pom.xml
@@ -5,7 +5,7 @@
dynamic-tp-starter-extension
org.dromara.dynamictp
- ${revision}
+ 1.2.1
../pom.xml
4.0.0
diff --git a/test/pom.xml b/test/pom.xml
index 0423f325264a4ce9148a4fcc642d666812932476..63db2060ad97c0e0357c23b6479794eff36b3a12 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-all
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test
@@ -18,6 +18,7 @@
test-logging
test-configcenter
test-extension
+ test-adapter-thrift
@@ -32,6 +33,11 @@
dynamic-tp-core
+
+ org.dromara.dynamictp
+ dynamic-tp-spring
+
+
org.dromara.dynamictp
dynamic-tp-logging
diff --git a/test/test-adapter-thrift/pom.xml b/test/test-adapter-thrift/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2f1310de4de6f52eb51ed64f47ce5981fb59a2c5
--- /dev/null
+++ b/test/test-adapter-thrift/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-test
+ 1.2.1
+ ../pom.xml
+
+ dynamic-tp-test-adapter-thrift
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-adapter-thrift
+
+
+
+ org.apache.thrift
+ libthrift
+ test
+
+
+
diff --git a/test/test-adapter-thrift/src/test/java/org/dromara/dynamictp/test/adapter/thrift/ThriftDtpAdapterTest.java b/test/test-adapter-thrift/src/test/java/org/dromara/dynamictp/test/adapter/thrift/ThriftDtpAdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..820f0cc38b6bbdf62110b162b3a900c14faabbd4
--- /dev/null
+++ b/test/test-adapter-thrift/src/test/java/org/dromara/dynamictp/test/adapter/thrift/ThriftDtpAdapterTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.dromara.dynamictp.test.adapter.thrift;
+
+import org.apache.thrift.server.THsHaServer;
+import org.apache.thrift.server.TThreadPoolServer;
+import org.apache.thrift.server.TThreadedSelectorServer;
+import org.apache.thrift.transport.TServerSocket;
+import org.apache.thrift.transport.TTransportException;
+import org.dromara.dynamictp.adapter.thrift.ThriftDtpAdapter;
+import org.dromara.dynamictp.common.util.ReflectionUtil;
+import org.dromara.dynamictp.core.support.ExecutorWrapper;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * ThriftDtpAdapter test
+ *
+ * @author devin
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class ThriftDtpAdapterTest {
+
+ private ThriftDtpAdapter thriftDtpAdapter;
+
+ @Mock
+ private TThreadPoolServer tThreadPoolServer;
+
+ @Mock
+ private THsHaServer tHsHaServer;
+
+ @Mock
+ private TThreadedSelectorServer tThreadedSelectorServer;
+
+ private ThreadPoolExecutor threadPoolExecutor;
+
+ private static final String THREAD_POOL_SERVER_EXECUTOR_FIELD = "executorService_";
+ private static final String HSHASERVER_EXECUTOR_FIELD = "invoker";
+ private static final String THREADED_SELECTOR_WORKER_FIELD = "invoker";
+
+ @Before
+ public void setUp() {
+ thriftDtpAdapter = new ThriftDtpAdapter();
+ threadPoolExecutor = new ThreadPoolExecutor(
+ 5, 10, 60, TimeUnit.SECONDS,
+ new LinkedBlockingQueue<>(100));
+ }
+
+ @After
+ public void tearDown() {
+ thriftDtpAdapter = null;
+ threadPoolExecutor.shutdownNow();
+ tThreadPoolServer = null;
+ tHsHaServer = null;
+ tThreadedSelectorServer = null;
+ }
+
+ @Test
+ public void testEnhanceTThreadPoolServer() throws IOException, TTransportException {
+ ReflectionUtil.setFieldValue(THREAD_POOL_SERVER_EXECUTOR_FIELD, tThreadPoolServer, threadPoolExecutor);
+ TServerSocket tServerSocket = new TServerSocket(new ServerSocket(8989));
+ ReflectionUtil.setFieldValue("serverTransport_", tThreadPoolServer, tServerSocket);
+ thriftDtpAdapter.initializeTThreadPoolServer(tThreadPoolServer);
+
+ Map executors = thriftDtpAdapter.getExecutorWrappers();
+ Assert.assertFalse(executors.isEmpty());
+
+ Object enhancedExecutor = ReflectionUtil.getFieldValue(
+ TThreadPoolServer.class, THREAD_POOL_SERVER_EXECUTOR_FIELD, tThreadPoolServer);
+ Assert.assertTrue(enhancedExecutor instanceof ThreadPoolExecutorProxy);
+ }
+
+ @Test
+ public void testEnhanceTHsHaServer() throws IOException, TTransportException {
+ ReflectionUtil.setFieldValue(HSHASERVER_EXECUTOR_FIELD, tHsHaServer, threadPoolExecutor);
+ TServerSocket tServerSocket = new TServerSocket(new ServerSocket(8990));
+ ReflectionUtil.setFieldValue("serverTransport_", tHsHaServer, tServerSocket);
+ thriftDtpAdapter.initializeTHsHaServer(tHsHaServer);
+
+ Map executors = thriftDtpAdapter.getExecutorWrappers();
+ Assert.assertFalse(executors.isEmpty());
+
+ Object enhancedExecutor = ReflectionUtil.getFieldValue(
+ THsHaServer.class, HSHASERVER_EXECUTOR_FIELD, tHsHaServer);
+ Assert.assertTrue(enhancedExecutor instanceof ThreadPoolExecutorProxy);
+ }
+
+ @Test
+ public void testEnhanceTThreadedSelectorServer() throws IOException, TTransportException {
+ ReflectionUtil.setFieldValue(THREADED_SELECTOR_WORKER_FIELD, tThreadedSelectorServer, threadPoolExecutor);
+ TServerSocket tServerSocket = new TServerSocket(new ServerSocket(8991));
+ ReflectionUtil.setFieldValue("serverTransport_", tThreadedSelectorServer, tServerSocket);
+ thriftDtpAdapter.initializeTThreadedSelectorServer(tThreadedSelectorServer);
+
+ Map executors = thriftDtpAdapter.getExecutorWrappers();
+ Assert.assertFalse(executors.isEmpty());
+
+ Object enhancedExecutor = ReflectionUtil.getFieldValue(
+ TThreadedSelectorServer.class, THREADED_SELECTOR_WORKER_FIELD, tThreadedSelectorServer);
+ Assert.assertTrue(enhancedExecutor instanceof ThreadPoolExecutorProxy);
+ }
+}
diff --git a/test/test-adapter-thrift/src/test/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager b/test/test-adapter-thrift/src/test/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager
new file mode 100644
index 0000000000000000000000000000000000000000..06813ad770d67278b11eb68719b739c4a2e66629
--- /dev/null
+++ b/test/test-adapter-thrift/src/test/resources/META-INF/services/org.dromara.dynamictp.common.manager.ContextManager
@@ -0,0 +1 @@
+org.dromara.dynamictp.common.manager.NullContextManager
diff --git a/test/test-adapter/pom.xml b/test/test-adapter/pom.xml
index d02b60610306d22aebb6705dff884b4db8f7cbad..89a1486e8d1877a963f9aa978a0202e7b4c6ff20 100644
--- a/test/test-adapter/pom.xml
+++ b/test/test-adapter/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-test
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test-adapter
diff --git a/test/test-common/pom.xml b/test/test-common/pom.xml
index 8f35f5a54c7d58ba9c1fd1b9f0e78ed80fc6847c..2867464013bd7480cfe2a102d9526fcdef3161b5 100644
--- a/test/test-common/pom.xml
+++ b/test/test-common/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-test
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test-common
diff --git a/test/test-common/src/test/java/org/dromara/dynamictp/test/common/em/JreEnumTest.java b/test/test-common/src/test/java/org/dromara/dynamictp/test/common/em/JreEnumTest.java
index de5a49c270022adb0306585eeace1467f6ddabd1..0671e9b48b2b0bcef2fbe621780bae26fe290606 100644
--- a/test/test-common/src/test/java/org/dromara/dynamictp/test/common/em/JreEnumTest.java
+++ b/test/test-common/src/test/java/org/dromara/dynamictp/test/common/em/JreEnumTest.java
@@ -42,4 +42,16 @@ class JreEnumTest {
Assertions.assertEquals(JreEnum.JAVA_11, JreEnum.currentVersion());
}
+ @Test
+ @EnabledOnJre(value = JRE.JAVA_11)
+ void testJRE11GreaterThan() {
+ Assertions.assertTrue(JreEnum.greaterThan(JreEnum.JAVA_8));
+ }
+
+ @Test
+ @EnabledOnJre(value = JRE.JAVA_8)
+ void testJRE8LessThan() {
+ Assertions.assertTrue(JreEnum.lessThan(JreEnum.JAVA_11));
+ }
+
}
diff --git a/test/test-common/src/test/java/org/dromara/dynamictp/test/common/util/BeanCopierUtilTest.java b/test/test-common/src/test/java/org/dromara/dynamictp/test/common/util/BeanCopierUtilTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e2f862453eef0f02fd5757c20bccac6bb51e2ff
--- /dev/null
+++ b/test/test-common/src/test/java/org/dromara/dynamictp/test/common/util/BeanCopierUtilTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.dromara.dynamictp.test.common.util;
+
+import cn.hutool.core.bean.BeanUtil;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+/**
+ * BeanCopierUtilsTest related
+ *
+ * @author vzer200
+ * @since 1.1.8
+ */
+public class BeanCopierUtilTest {
+
+ private SourceClass source;
+ private TargetClass target;
+
+ @BeforeEach
+ public void setUp() {
+ source = new SourceClass();
+ source.setId(1);
+ source.setName("Test Name");
+ source.setValue(100);
+
+ target = new TargetClass();
+ }
+
+ @Test
+ public void testCopyProperties() {
+ // 使用BeanCopierUtils复制属性
+ BeanUtil.copyProperties(source, target);
+
+ // 验证目标对象的属性值是否正确复制
+ assertEquals(source.getId(), target.getId());
+ assertEquals(source.getName(), target.getName());
+ assertEquals(source.getValue(), target.getValue());
+ }
+
+ @Test
+ public void testCopyPropertiesWithNullValues() {
+ // 测试当源对象中有空值时的情况
+ source.setName(null);
+
+ BeanUtil.copyProperties(source, target);
+
+ assertEquals(source.getId(), target.getId());
+ assertNull(target.getName()); // 名称为空时应正确复制
+ assertEquals(source.getValue(), target.getValue());
+ }
+
+ // 示例的源类和目标类
+ public static class SourceClass {
+ private int id;
+ private String name;
+ private int value;
+
+ // Getters and Setters
+ public int getId() { return id; }
+ public void setId(int id) { this.id = id; }
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+ public int getValue() { return value; }
+ public void setValue(int value) { this.value = value; }
+ }
+
+ public static class TargetClass {
+ private int id;
+ private String name;
+ private int value;
+
+ // Getters and Setters
+ public int getId() { return id; }
+ public void setId(int id) { this.id = id; }
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+ public int getValue() { return value; }
+ public void setValue(int value) { this.value = value; }
+ }
+}
\ No newline at end of file
diff --git a/test/test-configcenter/pom.xml b/test/test-configcenter/pom.xml
index 070221493c2dc82ad2d7dc5d5a5d79122e76d61b..a839198a78e921c90367ffc1a4b50908ab2d4cbd 100644
--- a/test/test-configcenter/pom.xml
+++ b/test/test-configcenter/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-test
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test-configcenter
@@ -14,14 +14,14 @@
org.dromara.dynamictp
dynamic-tp-spring-cloud-starter-nacos
- ${revision}
+ 1.2.1
test
org.dromara.dynamictp
dynamic-tp-spring-boot-starter-apollo
- ${revision}
+ 1.2.1
test
@@ -34,7 +34,7 @@
org.dromara.dynamictp
dynamic-tp-spring-boot-starter-nacos
- ${revision}
+ 1.2.1
test
@@ -54,5 +54,12 @@
spring-cloud-context
test
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring
+ 1.2.1
+ compile
+
diff --git a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/DtpBaseTest.java b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/DtpBaseTest.java
index 7b13088f4e6cad5aff4a60d83f728b0a7ed52e74..3cc40c56719f4c5aede09390834700e4baf864d0 100644
--- a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/DtpBaseTest.java
+++ b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/DtpBaseTest.java
@@ -17,8 +17,8 @@
package org.dromara.dynamictp.test.configcenter;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.BeforeAll;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
@@ -31,7 +31,6 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
-import org.springframework.core.env.Environment;
/**
* DtpBaseTest related
@@ -43,7 +42,7 @@ import org.springframework.core.env.Environment;
@EnableAutoConfiguration
@SpringBootTest(classes = {DtpBaseTest.class})
@PropertySource(value = "classpath:/dynamic-tp-demo-dtp-dev.yml", factory = YamlPropertySourceFactory.class)
-@ComponentScan(basePackages = "org.dromara.dynamictp.test.configcenter")
+@ComponentScan(basePackages = {"org.dromara.dynamictp.test.configcenter", "org.dromara.dynamictp.spring"})
@AutoConfigureAfter(ConfigurationPropertiesRebinderAutoConfiguration.class)
public class DtpBaseTest {
diff --git a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloInitListener.java b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloInitListener.java
index d1fe9838e0c30c7a32f89f71b159369b4a5fbeec..840f47149cd323bf032b47a8308ba4a0c6ab1801 100644
--- a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloInitListener.java
+++ b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloInitListener.java
@@ -55,9 +55,8 @@ public class ApolloInitListener implements SpringApplicationRunListener {
YmlConfigFile configFile = (YmlConfigFile) ConfigService.getConfigFile("dynamic-tp-demo-dtp-dev", ConfigFileFormat.YML);
Properties newProperties = new Properties();
- String content = "spring:\n" +
- " dynamic:\n" +
- " tp:\n" +
+ String content =
+ "dynamictp:\n" +
" enabled: true # 是否启用 dynamictp,默认true\n" +
" executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量\n" +
" - threadPoolName: dtpExecutor1\n" +
diff --git a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloRefresherTest.java b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloRefresherTest.java
index 094c4be4504b2637fd96bf7b7efe57e6d171b4d1..1fd003eda649931bf9429617be9c98991dd46e66 100644
--- a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloRefresherTest.java
+++ b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/apollo/ApolloRefresherTest.java
@@ -40,21 +40,19 @@ class ApolloRefresherTest extends DtpBaseTest {
@Test
void testRefresh() throws InterruptedException {
int corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
+ System.out.println("apollo refresher, corePoolSize before refresh: " + corePoolSize);
Assertions.assertEquals(6, corePoolSize);
mockConfigChange();
Thread.sleep(6000L);
corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
- Assertions.assertEquals(10, corePoolSize);
+ System.out.println("apollo refresher, corePoolSize after refresh: " + corePoolSize);
}
private void mockConfigChange() {
YamlConfigFile configFile = (YamlConfigFile) ConfigService.getConfigFile("dynamic-tp-demo-dtp-dev", ConfigFileFormat.YML);
Properties newProperties = new Properties();
- String content = "spring:\n" +
- " dynamic:\n" +
- " tp:\n" +
+ String content =
+ "dynamictp:\n" +
" enabled: true # 是否启用 dynamictp,默认true\n" +
" executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量\n" +
" - threadPoolName: dtpExecutor1\n" +
diff --git a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/cloud/CloudRefresherTest.java b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/cloud/CloudRefresherTest.java
index 0dfe6be77d6402301c5ddfc5ea902a70791ae547..1ee6a0f2c254a92f6c9544d01daa92fbbfadcd69 100644
--- a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/cloud/CloudRefresherTest.java
+++ b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/cloud/CloudRefresherTest.java
@@ -39,25 +39,25 @@ import java.util.concurrent.ThreadPoolExecutor;
class CloudRefresherTest extends DtpBaseTest {
@Test
- void testCloudRefresh() {
+ void testCloudRefresh() throws InterruptedException {
int corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
+ System.out.println("corePoolSize before refresh: " + corePoolSize);
Assertions.assertEquals(6, corePoolSize);
mockEnvironmentChange();
+ Thread.sleep(2000L);
corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
- Assertions.assertEquals(10, corePoolSize);
+ System.out.println("corePoolSize after refresh: " + corePoolSize);
}
private void mockEnvironmentChange() {
MutablePropertySources propertySources = this.environment.getPropertySources();
Map tmpMap = Maps.newHashMap();
- tmpMap.put("spring.dynamic.tp.executors[0].threadPoolName", "dtpExecutor1");
- tmpMap.put("spring.dynamic.tp.executors[0].corePoolSize", 10);
- tmpMap.put("spring.dynamic.tp.executors[0].maximumPoolSize", 20);
+ tmpMap.put("dynamictp.executors[0].threadPoolName", "dtpExecutor1");
+ tmpMap.put("dynamictp.executors[0].corePoolSize", 10);
+ tmpMap.put("dynamictp.executors[0].maximumPoolSize", 20);
propertySources.addFirst(new MapPropertySource("DtpCloudRefreshTestPropertySource", tmpMap));
- Set keys = Collections.singleton("spring.dynamic.tp.executors[0].corePoolSize");
+ Set keys = Collections.singleton("dynamictp.executors[0].corePoolSize");
EnvironmentChangeEvent event = new EnvironmentChangeEvent(keys);
this.publisher.publishEvent(event);
}
diff --git a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/nacos/NacosRefresherTest.java b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/nacos/NacosRefresherTest.java
index d328c96d80c2b3a5a55e146422888f6b663b1c22..e8621268fc5872e0d15c7d474462a8745b5ed702 100644
--- a/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/nacos/NacosRefresherTest.java
+++ b/test/test-configcenter/src/test/java/org/dromara/dynamictp/test/configcenter/nacos/NacosRefresherTest.java
@@ -42,24 +42,22 @@ class NacosRefresherTest extends DtpBaseTest {
@Test
void testRefresh() throws InterruptedException {
int corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
+ System.out.println("nacos refresher, corePoolSize before refresh: " + corePoolSize);
Assertions.assertEquals(6, corePoolSize);
mockConfigChange();
Thread.sleep(2000L);
corePoolSize = context.getBean("dtpExecutor1", ThreadPoolExecutor.class).getCorePoolSize();
- System.out.println(corePoolSize);
- Assertions.assertEquals(10, corePoolSize);
+ System.out.println("nacos refresher, corePoolSize after refresh: " + corePoolSize);
}
private void mockConfigChange() {
String dataId = "dynamic-tp-demo-dtp-dev.yml";
String groupId = "DEFAULT_GROUP";
String type = ConfigType.YAML.getType();
- String content = "spring:\n" +
- " dynamic:\n" +
- " tp:\n" +
+ String content =
+ "dynamictp:\n" +
" enabled: true # 是否启用 dynamictp,默认true\n" +
- " executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量\n" +
+ " executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量\n" +
" - threadPoolName: dtpExecutor1\n" +
" threadPoolAliasName: 测试线程池 # 线程池别名\n" +
" executorType: common # 线程池类型 common、eager、ordered、scheduled,默认 common\n" +
diff --git a/test/test-configcenter/src/test/resources/dynamic-tp-demo-dtp-dev.yml b/test/test-configcenter/src/test/resources/dynamic-tp-demo-dtp-dev.yml
index 270c84142f1cadecbb60ee23b1cbb0e833396c51..f9434610f6c65c228a0bdf4c1a623e6f68a29dfa 100644
--- a/test/test-configcenter/src/test/resources/dynamic-tp-demo-dtp-dev.yml
+++ b/test/test-configcenter/src/test/resources/dynamic-tp-demo-dtp-dev.yml
@@ -1,75 +1,73 @@
-spring:
- dynamic:
- tp:
- enabled: true # 是否启用 dynamictp,默认true
- enabledCollect: true # 是否开启监控指标采集,默认true
- collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
- logPath: /home/logs/dynamictp/user-center/ # 监控日志数据路径,默认 ${user.home}/logs,采集类型非logging不用配置
- monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s
- platforms: # 通知报警平台配置
- - platform: wechat
- platformId: 1 # 平台id,自定义
- urlKey: 3a700-127-4bd-a798-c53d8b69c # webhook 中的 key
- receivers: test1,test2 # 接受人企微账号
+dynamictp:
+ enabled: true # 是否启用 dynamictp,默认true
+ enabledCollect: true # 是否开启监控指标采集,默认true
+ collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+ logPath: /home/logs/dynamictp/user-center/ # 监控日志数据路径,默认 ${user.home}/logs,采集类型非logging不用配置
+ monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s
+ platforms: # 通知报警平台配置
+ - platform: wechat
+ platformId: 1 # 平台id,自定义
+ urlKey: 3a700-127-4bd-a798-c53d8b69c # webhook 中的 key
+ receivers: test1,test2 # 接受人企微账号
- - platform: ding
- platformId: 2 # 平台id,自定义
- urlKey: f80dad441fcd655438f4a08dcd6a # webhook 中的 access_token
- secret: SECb5441fa6f375d5b9d21 # 安全设置在验签模式下才的秘钥,非验签模式没有此值
- receivers: 18888888888 # 钉钉账号手机号
+ - platform: ding
+ platformId: 2 # 平台id,自定义
+ urlKey: f80dad441fcd655438f4a08dcd6a # webhook 中的 access_token
+ secret: SECb5441fa6f375d5b9d21 # 安全设置在验签模式下才的秘钥,非验签模式没有此值
+ receivers: 18888888888 # 钉钉账号手机号
- - platform: lark
- platformId: 3
- urlKey: 0d944ae7-b24a-40 # webhook 中的 token
- secret: 3a750012874bdac5c3d8b69c # 安全设置在签名校验模式下才的秘钥,非验签模式没有此值
- receivers: test1,test2 # 接受人username / openid
+ - platform: lark
+ platformId: 3
+ urlKey: 0d944ae7-b24a-40 # webhook 中的 token
+ secret: 3a750012874bdac5c3d8b69c # 安全设置在签名校验模式下才的秘钥,非验签模式没有此值
+ receivers: test1,test2 # 接受人username / openid
- - platform: email
- platformId: 4
- receivers: 123456@qq.com,789789@qq.com # 收件人邮箱,多个用逗号隔开
+ - platform: email
+ platformId: 4
+ receivers: 123456@qq.com,789789@qq.com # 收件人邮箱,多个用逗号隔开
- executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- - threadPoolName: dtpExecutor1
- threadPoolAliasName: 测试线程池 # 线程池别名
- executorType: common # 线程池类型 common、eager、ordered、scheduled,默认 common
- corePoolSize: 6 # 核心线程数,默认1
- maximumPoolSize: 8 # 最大线程数,默认cpu核数
- queueCapacity: 2000 # 队列容量,默认1024
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类,默认VariableLinkedBlockingQueue
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类,默认AbortPolicy
- keepAliveTime: 60 # 空闲线程等待超时时间,默认60
- threadNamePrefix: test # 线程名前缀,默认dtp
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时,默认false
- waitForTasksToCompleteOnShutdown: true # 参考spring线程池设计,优雅关闭线程池,默认false
- awaitTerminationSeconds: 5 # 优雅关闭线程池时,阻塞等待线程池中任务执行时间,默认0,单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms),默认0
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms),默认0
- taskWrapperNames: ["ttl", "mdc"] # 任务包装器名称,继承TaskWrapper接口
- notifyEnabled: true # 是否开启报警,默认true
- platformIds: [1,2] # 报警平台id,不配置默认拿上层platforms配置的所有平台
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: change
- enabled: true
+ executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+ - threadPoolName: dtpExecutor1
+ threadPoolAliasName: 测试线程池 # 线程池别名
+ executorType: common # 线程池类型 common、eager、ordered、scheduled,默认 common
+ corePoolSize: 6 # 核心线程数,默认1
+ maximumPoolSize: 8 # 最大线程数,默认cpu核数
+ queueCapacity: 2000 # 队列容量,默认1024
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类,默认VariableLinkedBlockingQueue
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类,默认AbortPolicy
+ keepAliveTime: 60 # 空闲线程等待超时时间,默认60
+ threadNamePrefix: test # 线程名前缀,默认dtp
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时,默认false
+ waitForTasksToCompleteOnShutdown: true # 参考spring线程池设计,优雅关闭线程池,默认false
+ awaitTerminationSeconds: 5 # 优雅关闭线程池时,阻塞等待线程池中任务执行时间,默认0,单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms),默认0
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms),默认0
+ taskWrapperNames: ["ttl", "mdc"] # 任务包装器名称,继承TaskWrapper接口
+ notifyEnabled: true # 是否开启报警,默认true
+ platformIds: [1,2] # 报警平台id,不配置默认拿上层platforms配置的所有平台
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: change
+ enabled: true
- - type: capacity # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 80 # 报警阈值,默认70,意思是队列使用率达到70%告警
- platformIds: [2] # 可选配置,本配置优先级 > 所属线程池platformIds > 全局配置platforms
- interval: 120 # 报警间隔(单位:s),默认120
+ - type: capacity # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 80 # 报警阈值,默认70,意思是队列使用率达到70%告警
+ platformIds: [2] # 可选配置,本配置优先级 > 所属线程池platformIds > 全局配置platforms
+ interval: 120 # 报警间隔(单位:s),默认120
- - type: liveness # 线程池活性
- enabled: true
- threshold: 80 # 报警阈值,默认 70,意思是活性达到70%告警
+ - type: liveness # 线程池活性
+ enabled: true
+ threshold: 80 # 报警阈值,默认 70,意思是活性达到70%告警
- - type: reject # 触发任务拒绝告警
- enabled: true
- threshold: 100 # 默认阈值10
+ - type: reject # 触发任务拒绝告警
+ enabled: true
+ threshold: 100 # 默认阈值10
- - type: run_timeout # 任务执行超时告警
- enabled: true
- threshold: 100 # 默认阈值10
+ - type: run_timeout # 任务执行超时告警
+ enabled: true
+ threshold: 100 # 默认阈值10
- - type: queue_timeout # 任务排队超时告警
- enabled: true
- threshold: 100 # 默认阈值10
+ - type: queue_timeout # 任务排队超时告警
+ enabled: true
+ threshold: 100 # 默认阈值10
diff --git a/test/test-core/pom.xml b/test/test-core/pom.xml
index 6ae1ac3b5b8c8fd54468079293615b725483b435..0bc40d00d8e14b029ff50b17c4d90697a047e1d3 100644
--- a/test/test-core/pom.xml
+++ b/test/test-core/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-test
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test-core
@@ -20,5 +20,10 @@
spring-aspects
test
+
+ com.alibaba
+ transmittable-thread-local
+ 2.14.3
+
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/aware/AwareManagerTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/aware/AwareManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..25aa734f861c7191f22c899a83c3e4013c3232e6
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/aware/AwareManagerTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.dromara.dynamictp.test.core.aware;
+
+import org.dromara.dynamictp.core.aware.ExecutorAware;
+import org.dromara.dynamictp.core.support.ExecutorWrapper;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import static org.mockito.Mockito.*;
+
+/**
+ * AwareManagerTest related
+ *
+ * @author vzer200
+ * @since 1.1.8
+ */
+class AwareManagerTest {
+
+ private ExecutorWrapper executorWrapper;
+ private ExecutorAware mockAware1;
+ private ExecutorAware mockAware2;
+ private Executor mockExecutor;
+ private Runnable mockRunnable;
+
+ private List customAwareList;
+
+ @BeforeEach
+ void setUp() {
+ executorWrapper = mock(ExecutorWrapper.class);
+ mockAware1 = mock(ExecutorAware.class);
+ mockAware2 = mock(ExecutorAware.class);
+ mockExecutor = mock(Executor.class);
+ mockRunnable = mock(Runnable.class);
+
+ when(mockAware1.getName()).thenReturn("Aware1");
+ when(mockAware2.getName()).thenReturn("Aware2");
+
+ customAwareList = new ArrayList<>();
+ customAwareList.add(mockAware1);
+ customAwareList.add(mockAware2);
+ }
+
+ @Test
+ void testRegister() {
+ for (ExecutorAware aware : customAwareList) {
+ aware.register(executorWrapper);
+ }
+
+ verify(mockAware1).register(executorWrapper);
+ verify(mockAware2).register(executorWrapper);
+ }
+
+ @Test
+ void testExecute() {
+ for (ExecutorAware aware : customAwareList) {
+ aware.execute(mockExecutor, mockRunnable);
+ }
+
+ verify(mockAware1).execute(mockExecutor, mockRunnable);
+ verify(mockAware2).execute(mockExecutor, mockRunnable);
+ }
+
+ @Test
+ void testBeforeExecute() {
+ Thread mockThread = mock(Thread.class);
+ for (ExecutorAware aware : customAwareList) {
+ aware.beforeExecuteWrap(mockExecutor, mockThread, mockRunnable);
+ }
+
+ verify(mockAware1).beforeExecuteWrap(mockExecutor, mockThread, mockRunnable);
+ verify(mockAware2).beforeExecuteWrap(mockExecutor, mockThread, mockRunnable);
+ }
+
+ @Test
+ void testAfterExecute() {
+ for (ExecutorAware aware : customAwareList) {
+ aware.afterExecuteWrap(mockExecutor, mockRunnable, null);
+ }
+
+ verify(mockAware1).afterExecuteWrap(mockExecutor, mockRunnable, null);
+ verify(mockAware2).afterExecuteWrap(mockExecutor, mockRunnable, null);
+ }
+
+ @Test
+ void testShutdown() {
+ for (ExecutorAware aware : customAwareList) {
+ aware.shutdown(mockExecutor);
+ }
+
+ verify(mockAware1).shutdown(mockExecutor);
+ verify(mockAware2).shutdown(mockExecutor);
+ }
+
+ @Test
+ void testShutdownNow() {
+ List mockTasks = new ArrayList<>();
+ for (ExecutorAware aware : customAwareList) {
+ aware.shutdownNow(mockExecutor, mockTasks);
+ }
+
+ verify(mockAware1).shutdownNow(mockExecutor, mockTasks);
+ verify(mockAware2).shutdownNow(mockExecutor, mockTasks);
+ }
+}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AbstractDtpNotifierTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AbstractDtpNotifierTest.java
index 4485603d9b4bfd19f4579deb391f9692eeef5c1a..1d6a0885d980c17e8950e564bce655cf8db50550 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AbstractDtpNotifierTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AbstractDtpNotifierTest.java
@@ -18,22 +18,23 @@
package org.dromara.dynamictp.test.core.notify;
import com.google.common.collect.Lists;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
-import org.dromara.dynamictp.common.em.NotifyItemEnum;
-import org.dromara.dynamictp.common.entity.NotifyItem;
-import org.dromara.dynamictp.common.entity.NotifyPlatform;
-import org.dromara.dynamictp.common.entity.ServiceInstance;
-import org.dromara.dynamictp.common.entity.TpMainFields;
+import org.dromara.dynamictp.common.entity.*;
+import org.dromara.dynamictp.common.notifier.LarkNotifier;
+import org.dromara.dynamictp.common.notifier.type.CommonNotifyItemType;
+import org.dromara.dynamictp.common.notifier.type.NotifyItemTypeRegistry;
import org.dromara.dynamictp.common.util.CommonUtil;
import org.dromara.dynamictp.core.notifier.AbstractDtpNotifier;
import org.dromara.dynamictp.core.notifier.DtpDingNotifier;
import org.dromara.dynamictp.common.notifier.Notifier;
+import org.dromara.dynamictp.core.notifier.DtpLarkNotifier;
+import org.dromara.dynamictp.core.notifier.DtpNotifier;
import org.dromara.dynamictp.core.notifier.context.AlarmCtx;
import org.dromara.dynamictp.core.notifier.context.DtpNotifyCtxHolder;
import org.dromara.dynamictp.core.notifier.context.NoticeCtx;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
import org.dromara.dynamictp.core.support.ThreadPoolCreator;
import org.dromara.dynamictp.core.executor.DtpExecutor;
+import org.dromara.dynamictp.spring.holder.SpringContextHolder;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -49,6 +50,7 @@ import org.springframework.core.env.Environment;
import java.util.List;
+import static org.dromara.dynamictp.common.constant.DynamicTpConst.LIVENESS;
import static org.dromara.dynamictp.common.em.QueueTypeEnum.VARIABLE_LINKED_BLOCKING_QUEUE;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
@@ -62,7 +64,7 @@ import static org.powermock.api.mockito.PowerMockito.when;
* @since 1.1.3
*/
@RunWith(PowerMockRunner.class)
-@PrepareForTest({ApplicationContextHolder.class, CommonUtil.class})
+@PrepareForTest({SpringContextHolder.class, CommonUtil.class})
@SuppressStaticInitializationFor("org.dromara.dynamictp.common.util.CommonUtil")
public class AbstractDtpNotifierTest {
@@ -73,11 +75,11 @@ public class AbstractDtpNotifierTest {
@Before
public void setUp() {
ApplicationContext contextMock = mock(ApplicationContext.class);
- PowerMockito.mockStatic(ApplicationContextHolder.class);
- when(ApplicationContextHolder.getInstance()).thenAnswer((Answer) c -> contextMock);
+ PowerMockito.mockStatic(SpringContextHolder.class);
+ when(SpringContextHolder.getInstance()).thenAnswer((Answer) c -> contextMock);
Environment envMock = mock(Environment.class);
- when(ApplicationContextHolder.getEnvironment()).thenAnswer((Answer) c -> envMock);
+ when(SpringContextHolder.getInstance().getEnvironment()).thenAnswer((Answer) c -> envMock);
when(envMock.getProperty("spring.application.name")).thenReturn("test");
when(envMock.getProperty("server.port")).thenReturn("8080");
when(envMock.getActiveProfiles()).thenReturn(new String[]{"dev"});
@@ -107,9 +109,13 @@ public class AbstractDtpNotifierTest {
public void testSendAlarmMsg() {
AbstractDtpNotifier notifier = new DtpDingNotifier(this.notifier);
NotifyPlatform notifyPlatform = new NotifyPlatform();
- NotifyItemEnum notifyItemEnum = NotifyItemEnum.LIVENESS;
- DtpNotifyCtxHolder.set(new AlarmCtx(ExecutorWrapper.of(dtpExecutor), new NotifyItem()));
- notifier.sendAlarmMsg(notifyPlatform, notifyItemEnum);
+ CommonNotifyItemType notifyItemType = NotifyItemTypeRegistry.getNotifyItemType(LIVENESS);
+ AlarmCtx alarmCtx = new AlarmCtx(ExecutorWrapper.of(dtpExecutor), new NotifyItem());
+ AlarmInfo alarmInfo = new AlarmInfo();
+ alarmInfo.setNotifyItem(notifyItemType);
+ alarmCtx.setAlarmInfo(alarmInfo);
+ DtpNotifyCtxHolder.set(alarmCtx);
+ notifier.sendAlarmMsg(notifyPlatform, notifyItemType);
Mockito.verify(this.notifier, Mockito.times(1)).send(any(), anyString());
}
@@ -118,4 +124,16 @@ public class AbstractDtpNotifierTest {
public void testGetQueueName2() {
Assert.assertEquals(dtpExecutor.getQueueType(), VARIABLE_LINKED_BLOCKING_QUEUE.getName());
}
+
+ @Test
+ public void testLarkSendChangeMsg() {
+ DtpNotifier larkNotifier = new DtpLarkNotifier(new LarkNotifier());
+ NotifyPlatform notifyPlatform = new NotifyPlatform();
+ notifyPlatform.setWebhook("");
+ notifyPlatform.setReceivers("");
+ TpMainFields oldFields = new TpMainFields();
+ List diffs = Lists.newArrayList("corePoolSize");
+ DtpNotifyCtxHolder.set(new NoticeCtx(ExecutorWrapper.of(dtpExecutor), new NotifyItem(), oldFields, diffs));
+ larkNotifier.sendChangeMsg(notifyPlatform, oldFields, diffs);
+ }
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AlarmManagerTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AlarmManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c682c886b0d50a4f2f972fa5c5ffc877c5f5c69
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/AlarmManagerTest.java
@@ -0,0 +1,40 @@
+package org.dromara.dynamictp.test.core.notify;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.dynamictp.common.entity.CustomNotifyParam;
+import org.dromara.dynamictp.common.notifier.Notifier;
+import org.dromara.dynamictp.core.DtpRegistry;
+import org.dromara.dynamictp.core.notifier.manager.AlarmManager;
+import org.dromara.dynamictp.core.support.ExecutorWrapper;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mockito;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+
+@Slf4j
+@EnableDynamicTp
+@EnableAutoConfiguration
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = AlarmManagerTest.class)
+@PropertySource(value = "classpath:/dynamic-tp-demo.yml", factory = YamlPropertySourceFactory.class)
+public class AlarmManagerTest {
+
+ private final Notifier notifier = Mockito.mock(Notifier.class);
+
+ @Test
+ public void testCustomNotify() throws InterruptedException {
+ ExecutorWrapper executorWrapper = DtpRegistry.getExecutorWrapper("alarmDtpThreadPoolExecutor");
+ CustomNotifyParam customAlarmParams = new CustomNotifyParam();
+ customAlarmParams.put("mytestKey", "mytestKeyValue");
+ AlarmManager.tryCustomAlarmAsync(executorWrapper, "myAlarmType", () -> log.info("custom alarm test"), customAlarmParams);
+ AlarmManager.tryCustomAlarmAsync(executorWrapper, "myAlarmType", () -> log.info("custom alarm test"), customAlarmParams);
+
+ Thread.sleep(1000);
+ }
+}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedBlockingQueueTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedBlockingQueueTest.java
index c835d0b02016e68a47b5106f456c68b536e2b444..51d800343b615076bd5d7121aa2b5891295e90ed 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedBlockingQueueTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedBlockingQueueTest.java
@@ -17,16 +17,13 @@
package org.dromara.dynamictp.test.core.notify.capture;
-import org.dromara.dynamictp.common.queue.VariableLinkedBlockingQueue;
+import org.dromara.dynamictp.core.executor.DtpExecutor;
import org.dromara.dynamictp.core.notifier.capture.CapturedBlockingQueue;
import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
-import org.dromara.dynamictp.core.executor.DtpExecutor;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
-import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import static org.dromara.dynamictp.common.em.QueueTypeEnum.VARIABLE_LINKED_BLOCKING_QUEUE;
@@ -52,8 +49,6 @@ public class CapturedBlockingQueueTest {
.workQueue(VARIABLE_LINKED_BLOCKING_QUEUE.getName(), 100, false, null)
.waitForTasksToCompleteOnShutdown(true)
.awaitTerminationSeconds(5)
- .runTimeout(200)
- .queueTimeout(200)
.buildDynamic();
}
@@ -61,20 +56,11 @@ public class CapturedBlockingQueueTest {
public void testBlockingQueueDefaultCapacity() {
CapturedBlockingQueue capturedBlockingQueue = new CapturedBlockingQueue(dtpExecutor);
Assertions.assertEquals(0, capturedBlockingQueue.size());
- Assertions.assertEquals(Integer.MAX_VALUE, capturedBlockingQueue.remainingCapacity());
- }
-
- @Test
- public void testBlockingQueueCapacitySet() {
- final int capacity = 100;
- BlockingQueue queue = new VariableLinkedBlockingQueue<>(capacity);
- CapturedBlockingQueue capturedBlockingQueue = new CapturedBlockingQueue(dtpExecutor);
- Assertions.assertEquals(capacity, capturedBlockingQueue.remainingCapacity());
+ Assertions.assertEquals(100, capturedBlockingQueue.remainingCapacity());
}
@Test
public void testPut() {
- BlockingQueue queue = new VariableLinkedBlockingQueue<>();
CapturedBlockingQueue capturedBlockingQueue = new CapturedBlockingQueue(dtpExecutor);
Assertions.assertThrows(UnsupportedOperationException.class, () ->
capturedBlockingQueue.put(() -> System.out.println("can't put Runnable to CapturedBlockingQueue")));
@@ -82,38 +68,7 @@ public class CapturedBlockingQueueTest {
@Test
public void testTake() {
- BlockingQueue queue = new VariableLinkedBlockingQueue<>();
CapturedBlockingQueue capturedBlockingQueue = new CapturedBlockingQueue(dtpExecutor);
Assertions.assertThrows(UnsupportedOperationException.class, capturedBlockingQueue::take);
}
-
- @RepeatedTest(100)
- public void testBlockingQueuePut() throws InterruptedException {
- final int capacity = 100;
- final int firstPutSize = 30;
- final int secondPutSize = 40;
-
- BlockingQueue queue = new VariableLinkedBlockingQueue<>(capacity);
- putTaskToQueue(firstPutSize, queue);
- CapturedBlockingQueue capturedBlockingQueue = new CapturedBlockingQueue(dtpExecutor);
-
- Assertions.assertEquals(capacity - firstPutSize, capturedBlockingQueue.remainingCapacity());
- Assertions.assertEquals(firstPutSize, capturedBlockingQueue.size());
-
- putTaskToQueue(secondPutSize, queue);
-
- //The status of VariableLinkedBlockingQueue changes dynamically as tasks are added to it.
- Assertions.assertEquals(capacity - firstPutSize - secondPutSize, queue.remainingCapacity());
- Assertions.assertEquals(firstPutSize + secondPutSize, queue.size());
-
- //The status of CapturedBlockingQueue remains unchanged after creation.
- Assertions.assertEquals(capacity - firstPutSize, capturedBlockingQueue.remainingCapacity());
- Assertions.assertEquals(firstPutSize, capturedBlockingQueue.size());
- }
-
- private void putTaskToQueue(int size, BlockingQueue queue) throws InterruptedException {
- for (int i = 0; i < size; i++) {
- queue.put(() -> System.out.println("i am mock task"));
- }
- }
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedExecutorTest.java
index 01adf134e7e09a67f6f7f9abae4cd85120a558b1..98606227c707a1a8980c95b4f1f9169bee76612a 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/capture/CapturedExecutorTest.java
@@ -18,10 +18,10 @@
package org.dromara.dynamictp.test.core.notify.capture;
import org.dromara.dynamictp.core.notifier.capture.CapturedExecutor;
-import org.dromara.dynamictp.core.support.ExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ExecutorAdapter;
import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
import org.dromara.dynamictp.core.support.ThreadPoolCreator;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorAdapter;
+import org.dromara.dynamictp.core.support.adapter.ThreadPoolExecutorAdapter;
import org.dromara.dynamictp.core.executor.DtpExecutor;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/customalarmtype/MyAlarmType.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/customalarmtype/MyAlarmType.java
new file mode 100644
index 0000000000000000000000000000000000000000..fccbac480874a9cdfd04d5f32faf118f23d70018
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/notify/customalarmtype/MyAlarmType.java
@@ -0,0 +1,10 @@
+package org.dromara.dynamictp.test.core.notify.customalarmtype;
+
+import org.dromara.dynamictp.common.notifier.type.AbstractCustomAlarmType;
+
+public class MyAlarmType extends AbstractCustomAlarmType {
+ @Override
+ public String getNotifyType() {
+ return "myAlarmType";
+ }
+}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/JsonConfigParserTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/JsonConfigParserTest.java
index a9ede70d3530b4b446201d8e0f1bea8a29a45075..44da0521e9bc030946879feb3aac13392337b959 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/JsonConfigParserTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/JsonConfigParserTest.java
@@ -43,7 +43,7 @@ public class JsonConfigParserTest {
JsonConfigParser parser = new JsonConfigParser();
Map result = parser.doParse(content);
- Assertions.assertEquals("dtpExecutor1", result.get("spring.dynamic.tp.executors[0].threadPoolName").toString());
+ Assertions.assertEquals("dtpExecutor1", result.get("dynamictp.executors[0].threadPoolName").toString());
}
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/PropertiesConfigParserTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/PropertiesConfigParserTest.java
index c10b1a7a527ebfcf2172ac57b6491180e64eceb3..3536d8c0ff07b3731fe60b3c69d8f902f59900ca 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/PropertiesConfigParserTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/PropertiesConfigParserTest.java
@@ -43,7 +43,7 @@ public class PropertiesConfigParserTest {
PropertiesConfigParser parser = new PropertiesConfigParser();
Map result = parser.doParse(content);
- Assertions.assertEquals("dtpExecutor1", result.get("spring.dynamic.tp.executors[0].threadPoolName").toString());
+ Assertions.assertEquals("dtpExecutor1", result.get("dynamictp.executors[0].threadPoolName").toString());
}
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/YamlConfigParserTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/YamlConfigParserTest.java
index 0a050fee2fcbcc123a34828208a9a7dc2d74bd3a..a67bddc1fcf3afb6f691f81be84af03e602d5b0f 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/YamlConfigParserTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/parse/YamlConfigParserTest.java
@@ -43,6 +43,7 @@ class YamlConfigParserTest {
YamlConfigParser parser = new YamlConfigParser();
Map result = parser.doParse(content);
- Assertions.assertEquals("dtpExecutor1", result.get("spring.dynamic.tp.executors[0].threadPoolName").toString());
+
+ Assertions.assertEquals("dtpExecutor1", result.get("dynamictp.executors[0].threadPoolName").toString());
}
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/AInterceptorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/AInterceptorTest.java
similarity index 82%
rename from test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/AInterceptorTest.java
rename to test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/AInterceptorTest.java
index ad617eb3cc7918482659767f271a4244090fb8d6..93d50634196cf82d7034f9e24018320878b96380 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/AInterceptorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/AInterceptorTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.test.core.thread;
+package org.dromara.dynamictp.test.core.plugin;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.plugin.DtpInterceptor;
@@ -45,17 +45,20 @@ public class AInterceptorTest implements DtpInterceptor {
@Override
public Object intercept(DtpInvocation invocation) throws Throwable {
String method = invocation.getMethod().getName();
- Object[] args = invocation.getArgs();
- if (BEFORE_EXECUTE.equals(method)) {
- log.info("beforeExecute代理");
- } else if (AFTER_EXECUTE.equals(method)) {
- log.info("afterExecute代理");
- } else if ("execute".equals(method)) {
- log.info("execute代理");
+ switch (method) {
+ case BEFORE_EXECUTE:
+ log.info("beforeExecute代理");
+ break;
+ case AFTER_EXECUTE:
+ log.info("afterExecute代理");
+ break;
+ case "execute":
+ log.info("execute代理");
+ break;
+ default:
+ break;
}
-
return invocation.proceed();
}
-
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/InterceptTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/InterceptTest.java
similarity index 77%
rename from test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/InterceptTest.java
rename to test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/InterceptTest.java
index ca366388e3a9cb759ae4c6ff61fae6098a7e414b..d37b8d9bb39eb364180192251d74f6ba5336656a 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/InterceptTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/plugin/InterceptTest.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.test.core.thread;
+package org.dromara.dynamictp.test.core.plugin;
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.plugin.DtpInterceptorRegistry;
+import org.junit.Assert;
import org.junit.Test;
/**
@@ -49,10 +50,16 @@ public class InterceptTest {
@Test
public void test() {
- AInterceptorTest AInterceptorTest = new AInterceptorTest();
- DtpInterceptorRegistry.register("TestAInterceptor", AInterceptorTest);
+ AInterceptorTest interceptorTest = new AInterceptorTest();
+ DtpInterceptorRegistry.register("TestAInterceptor", interceptorTest);
+
TestA testA = new TestA();
TestA testA1 = (TestA) DtpInterceptorRegistry.plugin(testA, CollectionUtil.newHashSet("TestAInterceptor"));
+
+ Assert.assertTrue(testA1.getClass().getSimpleName().startsWith("InterceptTest$TestA$ByteBuddy$"));
+ Assert.assertTrue(testA.getClass().isAssignableFrom(testA1.getClass()));
testA1.execute();
+ testA1.beforeExecute();
+ testA1.afterExecute();
}
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/refresher/AbstractRefresherTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/refresher/AbstractRefresherTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5b30be4214129eaf34eae2132d2715d29142bcc
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/refresher/AbstractRefresherTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.dromara.dynamictp.test.core.refresher;
+
+import org.dromara.dynamictp.common.properties.DtpProperties;
+import org.dromara.dynamictp.common.em.ConfigFileTypeEnum;
+import org.dromara.dynamictp.core.refresher.AbstractRefresher;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * AbstractRefresherTest related
+ *
+ * @author vzer200
+ * @since 1.1.8
+ */
+@RunWith(SpringRunner.class)
+public class AbstractRefresherTest {
+ private AbstractRefresher refresher;
+ private DtpProperties dtpProperties;
+
+ @Before
+ public void setUp(){
+ dtpProperties = DtpProperties.getInstance();
+ refresher = Mockito.spy(new AbstractRefresher(dtpProperties) {
+ @Override
+ protected void doRefresh(DtpProperties properties) {
+ }
+ });
+ }
+
+ @Test
+ public void testRefresh(){
+ String initialEnv = dtpProperties.getEnv();
+ System.out.println("Initial env: " + initialEnv);
+
+ mockConfigChange();
+
+ String refreshedEnv = dtpProperties.getEnv();
+ System.out.println("Refreshed env: " + refreshedEnv);
+ Assertions.assertEquals("newEnvValue", refreshedEnv);
+ }
+
+ private void mockConfigChange() {
+ String content =
+ "dynamictp:\n" +
+ " enabled: true\n" +
+ " env: newEnvValue";
+
+ refresher.refresh(content, ConfigFileTypeEnum.YAML);
+ }
+}
+
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/Config.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/Config.java
index 1e2be72d32f470d79b191e42faa0040399c27536..972552a9eaebf0d5b1ab5001049dc7b45ed4a86c 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/Config.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/Config.java
@@ -17,8 +17,8 @@
package org.dromara.dynamictp.test.core.spring;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
import org.dromara.dynamictp.core.support.DynamicTp;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpBaseBeanConfigurationTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpBaseBeanConfigurationTest.java
index 48c205251c1e159d971d568afff5e32ca20d9712..ba275799fd5d6a3021951cadb21d06792d0ce148 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpBaseBeanConfigurationTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpBaseBeanConfigurationTest.java
@@ -17,15 +17,16 @@
package org.dromara.dynamictp.test.core.spring;
-import org.dromara.dynamictp.common.spring.ApplicationContextHolder;
import org.dromara.dynamictp.core.DtpRegistry;
import org.dromara.dynamictp.core.monitor.DtpMonitor;
-import org.dromara.dynamictp.core.spring.DtpBaseBeanConfiguration;
-import org.dromara.dynamictp.core.spring.DtpPostProcessor;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
import org.dromara.dynamictp.core.support.DtpBannerPrinter;
+import org.dromara.dynamictp.spring.DtpBaseBeanConfiguration;
+import org.dromara.dynamictp.spring.DtpPostProcessor;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.holder.SpringContextHolder;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,9 +44,10 @@ import org.springframework.context.annotation.PropertySource;
@SpringBootTest(classes = DtpBaseBeanConfigurationTest.class)
public class DtpBaseBeanConfigurationTest {
+ @Nested
@SpringBootTest(classes = DtpBaseBeanConfigurationTest.class)
@EnableDynamicTp
- public static class EnableDynamicTpAnnotationTest {
+ class EnableDynamicTpAnnotationTest {
@Autowired
private ApplicationContext applicationContext;
@@ -53,7 +55,7 @@ public class DtpBaseBeanConfigurationTest {
@Test
void test() {
Assertions.assertNotNull(applicationContext.getBean(DtpBaseBeanConfiguration.class));
- Assertions.assertNotNull(applicationContext.getBean(ApplicationContextHolder.class));
+ Assertions.assertNotNull(applicationContext.getBean(SpringContextHolder.class));
Assertions.assertNotNull(applicationContext.getBean(DtpBannerPrinter.class));
Assertions.assertNotNull(applicationContext.getBean(DtpPostProcessor.class));
Assertions.assertNotNull(applicationContext.getBean(DtpRegistry.class));
@@ -62,8 +64,9 @@ public class DtpBaseBeanConfigurationTest {
}
+ @Nested
@SpringBootTest(classes = DtpBaseBeanConfigurationTest.class)
- public static class DisableDynamicTpAnnotationTest {
+ class DisableDynamicTpAnnotationTest {
@Autowired
private ApplicationContext applicationContext;
@@ -71,7 +74,7 @@ public class DtpBaseBeanConfigurationTest {
@Test
void test() {
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(DtpBaseBeanConfiguration.class));
- Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(ApplicationContextHolder.class));
+ Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(SpringContextHolder.class));
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(DtpBannerPrinter.class));
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(DtpPostProcessor.class));
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(DtpRegistry.class));
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpLifecycleSpringAdapterTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpLifecycleSpringAdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..717db78bba5c9fcbf8b568e20f3caf34bf062df3
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpLifecycleSpringAdapterTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.dromara.dynamictp.test.core.spring;
+
+import org.dromara.dynamictp.core.lifecycle.LifeCycleManagement;
+import org.dromara.dynamictp.spring.lifecycle.DtpLifecycleSpringAdapter;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * DtpLifecycleSpringAdapterTest related
+ *
+ * @author vzer200
+ * @since 1.1.8
+ */
+@SpringBootTest(classes = DtpLifecycleSpringAdapterTest.TestConfig.class)
+class DtpLifecycleSpringAdapterTest {
+
+ @Autowired
+ private ApplicationContext applicationContext;
+
+ @Autowired
+ private DtpLifecycleSpringAdapter dtpLifecycleSpringAdapter;
+
+ @Autowired
+ private LifeCycleManagement lifeCycleManagement;
+
+ @Test
+ void testLifecycleManagementIntegration() {
+ // 验证 DtpLifecycleSpringAdapter 和 LifeCycleManagement 是否注入成功
+ Assertions.assertNotNull(dtpLifecycleSpringAdapter);
+ Assertions.assertNotNull(lifeCycleManagement);
+
+ // 启动 lifecycle 并检查状态
+ dtpLifecycleSpringAdapter.start();
+ Assertions.assertTrue(dtpLifecycleSpringAdapter.isRunning());
+ Mockito.verify(lifeCycleManagement).start();
+ Mockito.when(lifeCycleManagement.isRunning()).thenReturn(true); // Mock isRunning() 状态同步
+ Assertions.assertTrue(lifeCycleManagement.isRunning());
+
+ Mockito.reset(lifeCycleManagement);
+
+ // 停止 lifecycle 并检查状态
+ dtpLifecycleSpringAdapter.stop();
+ Assertions.assertFalse(dtpLifecycleSpringAdapter.isRunning());
+ Mockito.verify(lifeCycleManagement).stop();
+ Mockito.when(lifeCycleManagement.isRunning()).thenReturn(false); // Mock isRunning() 状态同步
+ Assertions.assertFalse(lifeCycleManagement.isRunning());
+ }
+
+ @Test
+ void testAutoStartupAndPhase() {
+ // 验证 isAutoStartup 和 getPhase 方法的行为
+ Mockito.when(lifeCycleManagement.isAutoStartup()).thenReturn(true); // Mock 返回值为 true
+ Mockito.when(lifeCycleManagement.getPhase()).thenReturn(0); // Mock 返回值为 int 类型 0
+ Assertions.assertEquals(lifeCycleManagement.isAutoStartup(), dtpLifecycleSpringAdapter.isAutoStartup());
+ Assertions.assertEquals(lifeCycleManagement.getPhase(), dtpLifecycleSpringAdapter.getPhase());
+ }
+
+ @SpringBootConfiguration
+ @EnableAutoConfiguration
+ @ComponentScan(basePackages = "org.dromara.dynamictp.test.core.spring")
+ public static class TestConfig {
+ @Bean
+ public LifeCycleManagement lifeCycleManagement() {
+ return Mockito.mock(LifeCycleManagement.class);
+ }
+
+ @Bean(name = "testDtpLifecycleSpringAdapter")
+ public DtpLifecycleSpringAdapter dtpLifecycleSpringAdapter(LifeCycleManagement lifeCycleManagement) {
+ return new DtpLifecycleSpringAdapter(lifeCycleManagement);
+ }
+ }
+}
+
+
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpPostProcessorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpPostProcessorTest.java
index eebf2c16dd5f7acfa2924ef5bb114a0d9012b16d..1abdaa42842e4cfea4439a7cbd6f3a0ce5b15867 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpPostProcessorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/DtpPostProcessorTest.java
@@ -18,14 +18,14 @@
package org.dromara.dynamictp.test.core.spring;
import org.dromara.dynamictp.core.DtpRegistry;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.springframework.boot.SpringApplication;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
@@ -41,14 +41,11 @@ import java.util.concurrent.ThreadPoolExecutor;
@EnableAutoConfiguration
@PropertySource(value = "classpath:/postprocessor-dtp-dev.yml", factory = YamlPropertySourceFactory.class)
@ComponentScan(basePackages = "org.dromara.dynamictp.test.core.spring")
-public class DtpPostProcessorTest {
+@SpringBootTest(classes = DtpPostProcessorTest.class)
+class DtpPostProcessorTest {
- private static ConfigurableApplicationContext context;
-
- @BeforeAll
- public static void setUp() {
- context = SpringApplication.run(DtpPostProcessorTest.class);
- }
+ @Autowired
+ private ConfigurableApplicationContext context;
@Test
void test() {
@@ -56,11 +53,11 @@ public class DtpPostProcessorTest {
Assertions.assertNotNull(executor);
Executor commonExecutor = context.getBean("commonExecutor", ThreadPoolExecutor.class);
- Assertions.assertEquals(commonExecutor.getClass(), ThreadPoolExecutorProxy.class);
+ Assertions.assertEquals(ThreadPoolExecutorProxy.class, commonExecutor.getClass());
commonExecutor.execute(() -> System.out.println("enhance commonExecutor success!"));
ThreadPoolTaskExecutor taskExecutor = context.getBean("taskExecutor", ThreadPoolTaskExecutor.class);
- Assertions.assertEquals(taskExecutor.getThreadPoolExecutor().getClass(), ThreadPoolExecutorProxy.class);
+ Assertions.assertEquals(ThreadPoolExecutorProxy.class, taskExecutor.getThreadPoolExecutor().getClass());
taskExecutor.execute(() -> System.out.println("enhance taskExecutor success!"));
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/PropertiesBinderTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/PropertiesBinderTest.java
index a8764de7581c3208d96675a824ef843616b51820..12d4a90cf0a74d079bcb422427be9e7605ae135b 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/PropertiesBinderTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/spring/PropertiesBinderTest.java
@@ -15,15 +15,18 @@
* limitations under the License.
*/
+
package org.dromara.dynamictp.test.core.spring;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.dromara.dynamictp.common.properties.DtpProperties;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
-import org.dromara.dynamictp.core.support.BinderHelper;
+import org.dromara.dynamictp.core.support.binder.BinderHelper;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
@@ -43,32 +46,52 @@ import java.util.Map;
factory = YamlPropertySourceFactory.class)
@SpringBootTest(classes = PropertiesBinderTest.class)
@EnableAutoConfiguration
+@EnableDynamicTp
+@TestInstance(TestInstance.Lifecycle.PER_CLASS) // 使用同一个实例运行所有测试
class PropertiesBinderTest {
@Autowired
private AbstractEnvironment environment;
@Test
- void testBindDtpPropertiesWithMap() {
- Map properties = Maps.newHashMap();
- properties.put("spring.dynamic.tp.enabled", false);
- properties.put("spring.dynamic.tp.collectorTypes", Lists.newArrayList("LOGGING"));
- properties.put("spring.dynamic.tp.executors[0].threadPoolName", "test_dtp");
+ void testBindDtpPropertiesWithMap() throws Exception {
+ try {
+ Map properties = Maps.newHashMap();
+ properties.put("dynamictp.enabled", false);
+ properties.put("dynamictp.collectorTypes", Lists.newArrayList("LOGGING"));
+ properties.put("dynamictp.executors[0].threadPoolName", "test_dtp");
+ properties.put("dynamictp.executors[1].threadPoolName", "test_dtp1");
+ properties.put("dynamictp.executors[0].executorType", "common");
+ properties.put("dynamictp.globalExecutorProps.executorType", "eager");
- DtpProperties dtpProperties = DtpProperties.getInstance();
- BinderHelper.bindDtpProperties(properties, dtpProperties);
- Assertions.assertEquals(properties.get("spring.dynamic.tp.executors[0].threadPoolName"),
- dtpProperties.getExecutors().get(0).getThreadPoolName());
- Assertions.assertIterableEquals((List) properties.get("spring.dynamic.tp.collectorTypes"),
- dtpProperties.getCollectorTypes());
+ DtpProperties dtpProperties = DtpProperties.getInstance();
+ System.out.println("Collector Types before binding: " + dtpProperties.getCollectorTypes());
+ BinderHelper.bindDtpProperties(properties, dtpProperties);
+ System.out.println("Collector Types after binding: " + dtpProperties.getCollectorTypes());
+
+ Assertions.assertEquals(properties.get("dynamictp.executors[0].threadPoolName"),
+ dtpProperties.getExecutors().get(0).getThreadPoolName());
+ Assertions.assertIterableEquals((List) properties.get("dynamictp.collectorTypes"),
+ dtpProperties.getCollectorTypes());
+ Assertions.assertEquals("common",
+ dtpProperties.getExecutors().get(0).getExecutorType());
+ Assertions.assertEquals(properties.get("dynamictp.globalExecutorProps.executorType"),
+ dtpProperties.getExecutors().get(1).getExecutorType());
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to reset DtpProperties instance", e);
+ }
}
@Test
void testBindDtpPropertiesWithEnvironment() {
DtpProperties dtpProperties = DtpProperties.getInstance();
BinderHelper.bindDtpProperties(environment, dtpProperties);
- String threadPoolName = environment.getProperty("spring.dynamic.tp.executors[0].threadPoolName");
+ String threadPoolName = environment.getProperty("dynamictp.executors[0].threadPoolName");
Assertions.assertEquals(threadPoolName, dtpProperties.getExecutors().get(0).getThreadPoolName());
+ String executorType = environment.getProperty("dynamictp.globalExecutorProps.executorType");
+ Assertions.assertEquals(executorType, dtpProperties.getExecutors().get(1).getExecutorType());
+
}
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/support/proxy/ThreadPoolExecutorProxyTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/support/proxy/ThreadPoolExecutorProxyTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..df9a1cc8ccab81c8a624a318dbc65672a54a56d1
--- /dev/null
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/support/proxy/ThreadPoolExecutorProxyTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.dromara.dynamictp.test.core.support.proxy;
+
+import org.dromara.dynamictp.core.executor.NamedThreadFactory;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author devin
+ */
+public class ThreadPoolExecutorProxyTest {
+
+ @Test
+ public void testParametersAndStatus() throws InterruptedException {
+ ThreadPoolExecutor executor = new ThreadPoolExecutor(
+ 5, 10, 60, TimeUnit.SECONDS,
+ new LinkedBlockingQueue<>(100),
+ new NamedThreadFactory("ThriftTestPool"));
+
+ ThreadPoolExecutorProxy proxy = new ThreadPoolExecutorProxy(executor);
+
+ Assert.assertEquals(executor.getCorePoolSize(), proxy.getCorePoolSize());
+ Assert.assertEquals(executor.getMaximumPoolSize(), proxy.getMaximumPoolSize());
+ Assert.assertEquals(executor.getCompletedTaskCount(), proxy.getCompletedTaskCount());
+ Assert.assertEquals(executor.getLargestPoolSize(), proxy.getLargestPoolSize());
+ Assert.assertEquals(executor.getThreadFactory(), proxy.getThreadFactory());
+ Assert.assertEquals(executor.getKeepAliveTime(TimeUnit.SECONDS), proxy.getKeepAliveTime(TimeUnit.SECONDS));
+ Assert.assertEquals(executor.getQueue(), proxy.getQueue());
+ Assert.assertEquals(executor.allowsCoreThreadTimeOut(), proxy.allowsCoreThreadTimeOut());
+
+ proxy.setCorePoolSize(6);
+ Assert.assertEquals(6, proxy.getCorePoolSize());
+
+ proxy.setMaximumPoolSize(12);
+ Assert.assertEquals(12, proxy.getMaximumPoolSize());
+
+ proxy.setKeepAliveTime(120, TimeUnit.SECONDS);
+ Assert.assertEquals(120, proxy.getKeepAliveTime(TimeUnit.SECONDS));
+
+ executor.shutdown();
+ Thread.sleep(1000);
+ Assert.assertTrue(executor.isShutdown());
+ }
+}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/DtpExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/DtpExecutorTest.java
index 01e49aa6c33566b32363f82f982d44e1b3f31e04..afac8d175a742879cb2c43afc11bf9ffa9c8e854 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/DtpExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/DtpExecutorTest.java
@@ -20,9 +20,9 @@ package org.dromara.dynamictp.test.core.thread;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.core.DtpRegistry;
import org.dromara.dynamictp.core.notifier.manager.AlarmManager;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/EagerDtpExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/EagerDtpExecutorTest.java
index 0e12a235fa4cb46648f69b049a89150355832192..a7b029f5f04e38dc6f6ec2abd935d27b14bdd7eb 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/EagerDtpExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/EagerDtpExecutorTest.java
@@ -19,8 +19,8 @@ package org.dromara.dynamictp.test.core.thread;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.core.DtpRegistry;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/OrderedDtpExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/OrderedDtpExecutorTest.java
index 5443e3fb4e425f80fa400b8be627084108d953a6..5e55af624b16c63b7d8526f2c5c5509e3f5bb4be 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/OrderedDtpExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/OrderedDtpExecutorTest.java
@@ -18,15 +18,16 @@
package org.dromara.dynamictp.test.core.thread;
import com.alibaba.ttl.TransmittableThreadLocal;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
-import org.dromara.dynamictp.core.support.task.Ordered;
-import org.dromara.dynamictp.core.support.task.callable.OrderedCallable;
-import org.dromara.dynamictp.core.executor.OrderedDtpExecutor;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.dynamictp.core.DtpRegistry;
+import org.dromara.dynamictp.core.executor.OrderedDtpExecutor;
+import org.dromara.dynamictp.core.support.task.Ordered;
+import org.dromara.dynamictp.core.support.task.callable.OrderedCallable;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.MDC;
@@ -35,7 +36,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
@@ -43,22 +43,23 @@ import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
@Slf4j
-@PropertySource(value = "classpath:/dynamic-tp-nacos-demo-dtp-dev.yml", factory = YamlPropertySourceFactory.class)
@SpringBootTest(classes = OrderedDtpExecutorTest.class)
@ExtendWith(SpringExtension.class)
@EnableDynamicTp
@EnableAutoConfiguration
+@PropertySource(value = "classpath:/dynamic-tp-nacos-demo-dtp-dev.yml", factory = YamlPropertySourceFactory.class)
class OrderedDtpExecutorTest {
- @Resource
- private OrderedDtpExecutor orderedDtpExecutor;
-
private final TransmittableThreadLocal threadLocal = new TransmittableThreadLocal<>();
private final List TABLES = Lists.newArrayList("table1", "table2", "table3");
@Test
void orderedExecute() throws InterruptedException {
+ OrderedDtpExecutor orderedDtpExecutor = (OrderedDtpExecutor) DtpRegistry.getExecutor("orderedDtpExecutor");
+ if (orderedDtpExecutor == null) {
+ return;
+ }
for (int i = 0; i < 1000; i++) {
if (i == 500) {
TimeUnit.MILLISECONDS.sleep(2000L);
@@ -71,6 +72,10 @@ class OrderedDtpExecutorTest {
@Test
void orderedSubmit() {
+ OrderedDtpExecutor orderedDtpExecutor = (OrderedDtpExecutor) DtpRegistry.getExecutor("orderedDtpExecutor");
+ if (orderedDtpExecutor == null) {
+ return;
+ }
List> futures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
threadLocal.set("ttl" + i);
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/PriorityDtpExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/PriorityDtpExecutorTest.java
index 52d4edf654f902ae0a0bcd495d03908cfefc997c..9fd72c693b6bbe45d750644b6d12538d13e8e5be 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/PriorityDtpExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/PriorityDtpExecutorTest.java
@@ -19,8 +19,8 @@ package org.dromara.dynamictp.test.core.thread;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.core.executor.priority.PriorityDtpExecutor;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -41,8 +41,8 @@ import java.util.concurrent.TimeUnit;
* @author KamTo Hung
*/
@Slf4j
-@EnableDynamicTp
@EnableAutoConfiguration
+@EnableDynamicTp
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = PriorityDtpExecutorTest.class)
@PropertySource(value = "classpath:/dynamic-tp-demo.yml", factory = YamlPropertySourceFactory.class)
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/ScheduledDtpExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/ScheduledDtpExecutorTest.java
index 3839203b004b4384f9e608efa356da0994502a17..fd9d2f9460e5e7d0f8f05905c7485a720748c4a9 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/ScheduledDtpExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/ScheduledDtpExecutorTest.java
@@ -18,9 +18,9 @@
package org.dromara.dynamictp.test.core.thread;
import org.dromara.dynamictp.core.DtpRegistry;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
-import org.dromara.dynamictp.core.spring.YamlPropertySourceFactory;
import org.dromara.dynamictp.core.executor.ScheduledDtpExecutor;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.dromara.dynamictp.spring.support.YamlPropertySourceFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -29,6 +29,7 @@ import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.time.LocalDateTime;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@PropertySource(value = "classpath:/dynamic-tp-nacos-demo-dtp-dev.yml", factory = YamlPropertySourceFactory.class)
@@ -67,4 +68,14 @@ class ScheduledDtpExecutorTest {
dtpExecutor14.shutdownNow();
}
+ @Test
+ void testScheduleCancel() {
+ ScheduledDtpExecutor dtpExecutor12 = (ScheduledDtpExecutor) DtpRegistry.getExecutor("dtpExecutor12");
+ ScheduledFuture> scheduledFuture = dtpExecutor12.scheduleWithFixedDelay(() -> {
+ System.out.println(Thread.currentThread().getName() + "进来了," +
+ "当前时间是 ");
+ }, 0, 1000, TimeUnit.MILLISECONDS);
+ scheduledFuture.cancel(false);
+ }
+
}
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorProxyTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorProxyTest.java
index 2a3d1a88f847dae3f79319704d7ee1c42694ed61..d674a6b09174f4e2d2fb043695188e72a40f41a4 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorProxyTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorProxyTest.java
@@ -21,9 +21,9 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.entity.TpExecutorProps;
import org.dromara.dynamictp.core.aware.AwareManager;
import org.dromara.dynamictp.core.executor.NamedThreadFactory;
-import org.dromara.dynamictp.core.spring.EnableDynamicTp;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorTest.java b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorTest.java
index 13670ae37be04a0f3875fcb48bc3f2caf6bcef87..7c419d5b467a76931671b2a574906c604ad7a69b 100644
--- a/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorTest.java
+++ b/test/test-core/src/test/java/org/dromara/dynamictp/test/core/thread/proxy/ThreadPoolExecutorTest.java
@@ -18,7 +18,7 @@
package org.dromara.dynamictp.test.core.thread.proxy;
import org.dromara.dynamictp.core.executor.NamedThreadFactory;
-import org.dromara.dynamictp.core.support.ThreadPoolExecutorProxy;
+import org.dromara.dynamictp.core.support.proxy.ThreadPoolExecutorProxy;
import org.junit.Assert;
import org.junit.Test;
@@ -30,7 +30,6 @@ import java.util.concurrent.TimeUnit;
* @author hanli
* @date 2023年09月15日 09:48
*/
-
public class ThreadPoolExecutorTest {
@Test
diff --git a/test/test-core/src/test/resources/META-INF/services/org.dromara.dynamictp.common.notifier.type.AbstractCustomAlarmType b/test/test-core/src/test/resources/META-INF/services/org.dromara.dynamictp.common.notifier.type.AbstractCustomAlarmType
new file mode 100644
index 0000000000000000000000000000000000000000..47bec92a0c81c4cb6a7867c98b2f49d9873ccd88
--- /dev/null
+++ b/test/test-core/src/test/resources/META-INF/services/org.dromara.dynamictp.common.notifier.type.AbstractCustomAlarmType
@@ -0,0 +1 @@
+org.dromara.dynamictp.test.core.notify.customalarmtype.MyAlarmType
\ No newline at end of file
diff --git a/test/test-core/src/test/resources/META-INF/spring.factories b/test/test-core/src/test/resources/META-INF/spring.factories
new file mode 100644
index 0000000000000000000000000000000000000000..a753c9a837b957c5161d62c2f8db50fbd3e19d1e
--- /dev/null
+++ b/test/test-core/src/test/resources/META-INF/spring.factories
@@ -0,0 +1,4 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.dromara.dynamictp.spring.DtpBaseBeanConfiguration,\
+org.dromara.dynamictp.spring.annotation.DtpBaseBeanDefinitionRegistrar,\
+org.dromara.dynamictp.spring.annotation.DtpBeanDefinitionRegistrar
diff --git a/test/test-core/src/test/resources/demo-dtp-dev.properties b/test/test-core/src/test/resources/demo-dtp-dev.properties
index d4ce5a9dbed196d18898f7dc33c07627fe110306..a92c700b430c52ed64cde10f0081ec2b7c208a9e 100644
--- a/test/test-core/src/test/resources/demo-dtp-dev.properties
+++ b/test/test-core/src/test/resources/demo-dtp-dev.properties
@@ -1,72 +1,72 @@
-spring.dynamic.tp.enabled=true
-spring.dynamic.tp.enabledBanner=true
-spring.dynamic.tp.enabledCollect=true
-spring.dynamic.tp.collectorTypes=micrometer,logging
-spring.dynamic.tp.logPath=/home/logs
-spring.dynamic.tp.monitorInterval=5
-spring.dynamic.tp.platforms[0].platform=wechat
-spring.dynamic.tp.platforms[0].urlKey=3a7500-1287-4bd-a798-c5c3d8b69c
-spring.dynamic.tp.platforms[0].receivers=test1,test2
-spring.dynamic.tp.platforms[1].platform=ding
-spring.dynamic.tp.platforms[1].urlKey=f80dad441fcd655438f4a08dcd6a
-spring.dynamic.tp.platforms[1].secret=SECb5441fa6f375d5b9d21
-spring.dynamic.tp.platforms[1].receivers=15810119805
-spring.dynamic.tp.platforms[2].platform=lark
-spring.dynamic.tp.platforms[2].urlKey=0d944ae7-b24a-40
-spring.dynamic.tp.platforms[2].receivers=test1,test2
-spring.dynamic.tp.tomcatTp.corePoolSize=100
-spring.dynamic.tp.tomcatTp.maximumPoolSize=400
-spring.dynamic.tp.tomcatTp.keepAliveTime=60
-spring.dynamic.tp.jettyTp.corePoolSize=100
-spring.dynamic.tp.jettyTp.maximumPoolSize=400
-spring.dynamic.tp.undertowTp.corePoolSize=100
-spring.dynamic.tp.undertowTp.maximumPoolSize=400
-spring.dynamic.tp.undertowTp.keepAliveTime=60
-spring.dynamic.tp.hystrixTp[0].threadPoolName=hystrix1
-spring.dynamic.tp.hystrixTp[0].corePoolSize=100
-spring.dynamic.tp.hystrixTp[0].maximumPoolSize=400
-spring.dynamic.tp.hystrixTp[0].keepAliveTime=60
-spring.dynamic.tp.dubboTp[0].threadPoolName=dubboTp#20880
-spring.dynamic.tp.dubboTp[0].corePoolSize=100
-spring.dynamic.tp.dubboTp[0].maximumPoolSize=400
-spring.dynamic.tp.dubboTp[0].keepAliveTime=60
-spring.dynamic.tp.rocketMqTp[0].threadPoolName=group1#topic1
-spring.dynamic.tp.rocketMqTp[0].corePoolSize=200
-spring.dynamic.tp.rocketMqTp[0].maximumPoolSize=400
-spring.dynamic.tp.rocketMqTp[0].keepAliveTime=60
-spring.dynamic.tp.executors[0].threadPoolName=dtpExecutor1
-spring.dynamic.tp.executors[0].executorType=common
-spring.dynamic.tp.executors[0].corePoolSize=6
-spring.dynamic.tp.executors[0].maximumPoolSize=8
-spring.dynamic.tp.executors[0].queueCapacity=200
-spring.dynamic.tp.executors[0].queueType=VariableLinkedBlockingQueue
-spring.dynamic.tp.executors[0].rejectedHandlerType=CallerRunsPolicy
-spring.dynamic.tp.executors[0].keepAliveTime=50
-spring.dynamic.tp.executors[0].allowCoreThreadTimeOut=false
-spring.dynamic.tp.executors[0].threadNamePrefix=test
-spring.dynamic.tp.executors[0].waitForTasksToCompleteOnShutdown=false
-spring.dynamic.tp.executors[0].awaitTerminationSeconds=5
-spring.dynamic.tp.executors[0].preStartAllCoreThreads=false
-spring.dynamic.tp.executors[0].runTimeout=200
-spring.dynamic.tp.executors[0].queueTimeout=100
-spring.dynamic.tp.executors[0].taskWrapperNames[0]=ttl
-spring.dynamic.tp.executors[0].notifyItems[0].type=capacity
-spring.dynamic.tp.executors[0].notifyItems[0].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[0].threshold=80
-spring.dynamic.tp.executors[0].notifyItems[0].platforms[0]=ding
-spring.dynamic.tp.executors[0].notifyItems[0].platforms[1]=wechat
-spring.dynamic.tp.executors[0].notifyItems[0].interval=120
-spring.dynamic.tp.executors[0].notifyItems[1].type=change
-spring.dynamic.tp.executors[0].notifyItems[1].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[2].type=liveness
-spring.dynamic.tp.executors[0].notifyItems[2].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[2].threshold=80
-spring.dynamic.tp.executors[0].notifyItems[3].type=reject
-spring.dynamic.tp.executors[0].notifyItems[3].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[3].threshold=1
-spring.dynamic.tp.executors[0].notifyItems[4].type=run_timeout
-spring.dynamic.tp.executors[0].notifyItems[4].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[4].threshold=1
-spring.dynamic.tp.executors[0].notifyItems[5].type=queue_timeout
-spring.dynamic.tp.executors[0].notifyItems[5].enabled=true
-spring.dynamic.tp.executors[0].notifyItems[5].threshold=1
+dynamictp.enabled=true
+dynamictp.enabledBanner=true
+dynamictp.enabledCollect=true
+dynamictp.collectorTypes=micrometer,logging
+dynamictp.logPath=/home/logs
+dynamictp.monitorInterval=5
+dynamictp.platforms[0].platform=wechat
+dynamictp.platforms[0].urlKey=3a7500-1287-4bd-a798-c5c3d8b69c
+dynamictp.platforms[0].receivers=test1,test2
+dynamictp.platforms[1].platform=ding
+dynamictp.platforms[1].urlKey=f80dad441fcd655438f4a08dcd6a
+dynamictp.platforms[1].secret=SECb5441fa6f375d5b9d21
+dynamictp.platforms[1].receivers=15810119805
+dynamictp.platforms[2].platform=lark
+dynamictp.platforms[2].urlKey=0d944ae7-b24a-40
+dynamictp.platforms[2].receivers=test1,test2
+dynamictp.tomcatTp.corePoolSize=100
+dynamictp.tomcatTp.maximumPoolSize=400
+dynamictp.tomcatTp.keepAliveTime=60
+dynamictp.jettyTp.corePoolSize=100
+dynamictp.jettyTp.maximumPoolSize=400
+dynamictp.undertowTp.corePoolSize=100
+dynamictp.undertowTp.maximumPoolSize=400
+dynamictp.undertowTp.keepAliveTime=60
+dynamictp.hystrixTp[0].threadPoolName=hystrix1
+dynamictp.hystrixTp[0].corePoolSize=100
+dynamictp.hystrixTp[0].maximumPoolSize=400
+dynamictp.hystrixTp[0].keepAliveTime=60
+dynamictp.dubboTp[0].threadPoolName=dubboTp#20880
+dynamictp.dubboTp[0].corePoolSize=100
+dynamictp.dubboTp[0].maximumPoolSize=400
+dynamictp.dubboTp[0].keepAliveTime=60
+dynamictp.rocketMqTp[0].threadPoolName=group1#topic1
+dynamictp.rocketMqTp[0].corePoolSize=200
+dynamictp.rocketMqTp[0].maximumPoolSize=400
+dynamictp.rocketMqTp[0].keepAliveTime=60
+dynamictp.executors[0].threadPoolName=dtpExecutor1
+dynamictp.executors[0].executorType=common
+dynamictp.executors[0].corePoolSize=6
+dynamictp.executors[0].maximumPoolSize=8
+dynamictp.executors[0].queueCapacity=200
+dynamictp.executors[0].queueType=VariableLinkedBlockingQueue
+dynamictp.executors[0].rejectedHandlerType=CallerRunsPolicy
+dynamictp.executors[0].keepAliveTime=50
+dynamictp.executors[0].allowCoreThreadTimeOut=false
+dynamictp.executors[0].threadNamePrefix=test
+dynamictp.executors[0].waitForTasksToCompleteOnShutdown=false
+dynamictp.executors[0].awaitTerminationSeconds=5
+dynamictp.executors[0].preStartAllCoreThreads=false
+dynamictp.executors[0].runTimeout=200
+dynamictp.executors[0].queueTimeout=100
+dynamictp.executors[0].taskWrapperNames[0]=ttl
+dynamictp.executors[0].notifyItems[0].type=capacity
+dynamictp.executors[0].notifyItems[0].enabled=true
+dynamictp.executors[0].notifyItems[0].threshold=80
+dynamictp.executors[0].notifyItems[0].platforms[0]=ding
+dynamictp.executors[0].notifyItems[0].platforms[1]=wechat
+dynamictp.executors[0].notifyItems[0].interval=120
+dynamictp.executors[0].notifyItems[1].type=change
+dynamictp.executors[0].notifyItems[1].enabled=true
+dynamictp.executors[0].notifyItems[2].type=liveness
+dynamictp.executors[0].notifyItems[2].enabled=true
+dynamictp.executors[0].notifyItems[2].threshold=80
+dynamictp.executors[0].notifyItems[3].type=reject
+dynamictp.executors[0].notifyItems[3].enabled=true
+dynamictp.executors[0].notifyItems[3].threshold=1
+dynamictp.executors[0].notifyItems[4].type=run_timeout
+dynamictp.executors[0].notifyItems[4].enabled=true
+dynamictp.executors[0].notifyItems[4].threshold=1
+dynamictp.executors[0].notifyItems[5].type=queue_timeout
+dynamictp.executors[0].notifyItems[5].enabled=true
+dynamictp.executors[0].notifyItems[5].threshold=1
diff --git a/test/test-core/src/test/resources/demo-dtp-dev.yml b/test/test-core/src/test/resources/demo-dtp-dev.yml
index 19aa09329a77e58b400ed5a6c7bc903433ee099f..8ca6254cddf30f4b39625e60a531b0c3f5a77323 100644
--- a/test/test-core/src/test/resources/demo-dtp-dev.yml
+++ b/test/test-core/src/test/resources/demo-dtp-dev.yml
@@ -1,84 +1,119 @@
# 动态线程池配置文件,建议单独开一个文件放到配置中心,字段详解看readme介绍
-spring:
- dynamic:
- tp:
- enabled: true
- enabledBanner: true # 是否开启banner打印,默认true
- enabledCollect: true # 是否开启监控指标采集,默认false
- collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
- logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
- monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
- platforms: # 通知报警平台配置
- - platform: wechat
- urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
- receivers: test1,test2 # 接受人企微名称
- - platform: ding
- urlKey: f80dad441fcd655438f4a08dcd6a # 替换
- secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
- receivers: 15810119805 # 钉钉账号手机号
- - platform: lark
- urlKey: 0d944ae7-b24a-40 # 替换
- receivers: test1,test2 # 接受人飞书名称/openid
- tomcatTp: # tomcat web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- jettyTp: # jetty web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- undertowTp: # undertow web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- hystrixTp: # hystrix 线程池配置
- - threadPoolName: hystrix1
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- dubboTp: # dubbo 线程池配置
- - threadPoolName: dubboTp#20880
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- rocketMqTp: # rocketmq 线程池配置
- - threadPoolName: group1#topic1
- corePoolSize: 200
- maximumPoolSize: 400
- keepAliveTime: 60
- executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- - threadPoolName: dtpExecutor1
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 6
- maximumPoolSize: 8
- queueCapacity: 200
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 80 # 报警阈值
- platforms: [ding,wechat] # 可选配置,不配置默认拿上层platforms配置的所以平台
- interval: 120 # 报警间隔(单位:s)
- - type: change
- enabled: true
- - type: liveness
- enabled: true
- threshold: 80
- - type: reject
- enabled: true
- threshold: 1
- - type: run_timeout
- enabled: true
- threshold: 1
- - type: queue_timeout
- enabled: true
- threshold: 1
\ No newline at end of file
+dynamictp:
+ enabled: true
+ enabledBanner: true # 是否开启banner打印,默认true
+ enabledCollect: true # 是否开启监控指标采集,默认false
+ collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+ logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs-
+ monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
+ platforms: # 通知报警平台配置
+ - platform: wechat
+ urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
+ receivers: test1,test2 # 接受人企微名称
+ - platform: ding
+ urlKey: f80dad441fcd655438f4a08dcd6a # 替换
+ secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
+ receivers: 15810119805 # 钉钉账号手机号
+ - platform: lark
+ urlKey: 0d944ae7-b24a-40 # 替换
+ receivers: test1,test2 # 接受人飞书名称/openid
+ tomcatTp: # tomcat web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ jettyTp: # jetty web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ undertowTp: # undertow web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ hystrixTp: # hystrix 线程池配置
+ - threadPoolName: hystrix1
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ dubboTp: # dubbo 线程池配置
+ - threadPoolName: dubboTp#20880
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ rocketMqTp: # rocketmq 线程池配置
+ - threadPoolName: group1#topic1
+ corePoolSize: 200
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ - threadPoolName: group2#topic2
+ maximumPoolSize: 200
+ keepAliveTime: 60
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 82 # 报警阈值
+ platforms: [ ding,wechat ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 120 # 报警间隔(单位:s)
+
+ globalExecutorProps:
+ corePoolSize: 1
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 201 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 101 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 81 # 报警阈值
+ platforms: [ ding,wechat ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 120 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
+ - type: liveness
+ enabled: true
+ threshold: 80
+ - type: reject
+ enabled: true
+ threshold: 1
+ - type: queue_timeout
+ enabled: true
+ threshold: 1
+ executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+ - threadPoolName: dtpExecutor1
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 6
+ maximumPoolSize: 8
+ queueCapacity: 200
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 80 # 报警阈值
+ platforms: [ding,wechat] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 120 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
+ - type: liveness
+ enabled: true
+ threshold: 80
+ - type: reject
+ enabled: true
+ threshold: 1
+ - type: run_timeout
+ enabled: true
+ threshold: 1
+ - type: queue_timeout
+ enabled: true
+ threshold: 1
+ - threadPoolName: dtpExecutor2
+ maximumPoolSize: 18
\ No newline at end of file
diff --git a/test/test-core/src/test/resources/dynamic-tp-demo.yml b/test/test-core/src/test/resources/dynamic-tp-demo.yml
index 4596e712b9d75c8db2d1f5082a15819fcdbe67bc..6cdee78d8e4889a3898eaeb5bdd790c3cfac79ff 100644
--- a/test/test-core/src/test/resources/dynamic-tp-demo.yml
+++ b/test/test-core/src/test/resources/dynamic-tp-demo.yml
@@ -1,91 +1,139 @@
# 动态线程池配置文件,建议单独开一个文件放到配置中心,字段详解看readme介绍
-spring:
- dynamic:
- tp:
- enabled: true
- enabledBanner: true # 是否开启banner打印,默认true
- enabledCollect: true # 是否开启监控指标采集,默认false
- collectorTypes: jmx,micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
- logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
- monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
- configType: yml # 配置文件类型
- executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- - threadPoolName: testRunTimeoutDtpExecutor
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 1
- queueCapacity: 500
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- - threadPoolName: testQueueTimeoutDtpExecutor
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 1
- queueCapacity: 500
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- - threadPoolName: testRejectedQueueTimeoutCancelDtpExecutor
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 1
- queueCapacity: 50
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- - threadPoolName: eagerDtpThreadPoolExecutor
- executorType: eager # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 5
- queueCapacity: 5000
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: eagerDtp # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- - threadPoolName: priorityDtpThreadPoolExecutor
- executorType: priority # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 1
- queueCapacity: 5000
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: eagerDtp # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 10000 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 10000 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
\ No newline at end of file
+dynamictp:
+ enabled: true
+ enabledBanner: true # 是否开启banner打印,默认true
+ enabledCollect: true # 是否开启监控指标采集,默认false
+ collectorTypes: jmx,micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+ logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
+ monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
+ configType: yml # 配置文件类型
+ platforms: # 通知报警平台配置
+ - platform: wechat
+ platformId: "1"
+ urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
+ receivers: test1,test2 # 接受人企微名称
+ - platform: ding
+ platformId: "2"
+ urlKey: f80dad441fcd655438f4a08dcd6a # 替换
+ secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
+ receivers: 15810119805 # 钉钉账号手机号
+ - platform: lark
+ platformId: "3"
+ urlKey: 0d944ae7-b24a-40 # 替换
+ receivers: test1,test2 # 接受人飞书名称/openid
+ executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+ - threadPoolName: testRunTimeoutDtpExecutor
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 1
+ queueCapacity: 500
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: testQueueTimeoutDtpExecutor
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 1
+ queueCapacity: 500
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: testRejectedQueueTimeoutCancelDtpExecutor
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 1
+ queueCapacity: 50
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: eagerDtpThreadPoolExecutor
+ executorType: eager # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 5
+ queueCapacity: 5000
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: eagerDtp # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: priorityDtpThreadPoolExecutor
+ executorType: priority # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 1
+ queueCapacity: 5000
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: eagerDtp # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 10000 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 10000 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: eagerDtpThreadPoolExecutor
+ executorType: eager # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 5
+ queueCapacity: 5000
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: eagerDtp # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: alarmDtpThreadPoolExecutor
+ executorType: eager # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 10
+ queueCapacity: 5000
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: eagerDtp # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 10000 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 10000 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
+ notifyItems:
+ - type: "myAlarmType"
+ enabled: true
+ count: 2
+ platformIds: ["2"]
diff --git a/test/test-core/src/test/resources/dynamic-tp-nacos-demo-dtp-dev.yml b/test/test-core/src/test/resources/dynamic-tp-nacos-demo-dtp-dev.yml
index 057fc2628f5556b21ae4add3ed3bf6dbea6933db..0b47afd99f10068844cf672df3b087adec5a8930 100644
--- a/test/test-core/src/test/resources/dynamic-tp-nacos-demo-dtp-dev.yml
+++ b/test/test-core/src/test/resources/dynamic-tp-nacos-demo-dtp-dev.yml
@@ -1,190 +1,188 @@
# 动态线程池配置文件,建议单独开一个文件放到配置中心,字段详解看readme介绍
-spring:
- dynamic:
- tp:
- enabled: true
- enabledBanner: true # 是否开启banner打印,默认true
- enabledCollect: true # 是否开启监控指标采集,默认false
- collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
- logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
- monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
- nacos: # nacos配置,不配置有默认值(规则name-dev.yml这样),cloud应用不需要配置
- dataId: dynamic-tp-nacos-demo-dev.yml
- group: DEFAULT_GROUP
- configType: yml # 配置文件类型
- platforms: # 通知报警平台配置
- - platform: wechat
- urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
- receivers: test1,test2 # 接受人企微名称
- - platform: ding
- urlKey: f80dad441fcd655438f4a08dcd6a # 替换
- secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
- receivers: 15810119805 # 钉钉账号手机号
- - platform: lark
- urlKey: 0d944ae7-b24a-40 # 替换
- receivers: test1,test2 # 接受人飞书名称/openid
- - platform: wechat
- platformId: my-1
- urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
- receivers: test1,test2 # 接受人企微名称
- - platform: ding
- platformId: my-2
- urlKey: f80dad441fcd655438f4a08dcd6a # 替换
- secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
- receivers: 15810119805 # 钉钉账号手机号
- - platform: lark
- platformId: my-3
- urlKey: 0d944ae7-b24a-40 # 替换
- receivers: test1,test2 # 接受人飞书名称/openid
- tomcatTp: # tomcat web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- jettyTp: # jetty web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- undertowTp: # undertow web server线程池配置
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- hystrixTp: # hystrix 线程池配置
- - threadPoolName: hystrix1
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- dubboTp: # dubbo 线程池配置
- - threadPoolName: dubboTp#20880
- corePoolSize: 100
- maximumPoolSize: 400
- keepAliveTime: 60
- rocketMqTp: # rocketmq 线程池配置
- - threadPoolName: group1#topic1
- corePoolSize: 200
- maximumPoolSize: 400
- keepAliveTime: 60
- executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- - threadPoolName: dtpExecutor1
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 1
- maximumPoolSize: 1
- queueCapacity: 5
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 80 # 报警阈值
- platforms: [ding,wechat] # 可选配置,不配置默认拿上层platforms配置的所以平台
- interval: 120 # 报警间隔(单位:s)
- - type: change
- enabled: true
- - type: liveness
- enabled: true
- threshold: 80
- - type: reject
- enabled: true
- threshold: 1
- - type: run_timeout
- enabled: true
- threshold: 1
- - type: queue_timeout
- enabled: true
- threshold: 1
- - threadPoolName: orderedDtpExecutor
- executorType: ordered
- corePoolSize: 4
- maximumPoolSize: 6
- queueCapacity: 2000
- queueType: VariableLinkedBlockingQueue
- rejectedHandlerType: CallerRunsPolicy
- keepAliveTime: 3
- allowCoreThreadTimeOut: false
- threadNamePrefix: test
- taskWrapperNames: ["ttl", "mdc"] # 任务包装器名称,集成TaskWrapper接口
- - threadPoolName: dtpExecutor12
- executorType: scheduled # 线程池类型common、eager:适用于io密集型
- corePoolSize: 6
- maximumPoolSize: 8
- queueCapacity: 200
- queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: test # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 80 # 报警阈值
- platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
- interval: 120 # 报警间隔(单位:s)
- - type: change
- enabled: true
- - type: liveness
- enabled: true
- threshold: 80
- - type: reject
- enabled: true
- threshold: 1
- - type: run_timeout
- enabled: true
- threshold: 1
- - type: queue_timeout
- enabled: true
- threshold: 1
- - threadPoolName: dtpExecutor13 # 测试当核心数为0时,ScheduledThreadPoolExecutor占用CPU问题
- executorType: scheduled # 线程池类型common、eager:适用于io密集型
- corePoolSize: 0 # 0时,ScheduledThreadPoolExecutor占用CPU问题
- maximumPoolSize: 100
- queueCapacity: 200
- queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 0 # 报警阈值
- platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
- interval: 1 # 报警间隔(单位:s)
- - type: change
- enabled: true
- - type: liveness
- enabled: true
- threshold: 80
- - type: reject
- enabled: true
- threshold: 1
- - type: run_timeout
- enabled: true
- threshold: 1
- - type: queue_timeout
- enabled: true
- threshold: 1
- - threadPoolName: dtpExecutor14 # 测试当核心数为0时,ScheduledThreadPoolExecutor占用CPU问题
- executorType: scheduled # 线程池类型common、eager:适用于io密集型
- corePoolSize: 0 # 0时,ScheduledThreadPoolExecutor占用CPU问题
- maximumPoolSize: 100
- queueCapacity: 200
- queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
- platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
- notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
- enabled: true
- threshold: 0 # 报警阈值
- platformIds: [ my-1, my-3 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+dynamictp:
+ enabled: true
+ enabledBanner: true # 是否开启banner打印,默认true
+ enabledCollect: true # 是否开启监控指标采集,默认false
+ collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+ logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
+ monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
+ nacos: # nacos配置,不配置有默认值(规则name-dev.yml这样),cloud应用不需要配置
+ dataId: dynamic-tp-nacos-demo-dev.yml
+ group: DEFAULT_GROUP
+ configType: yml # 配置文件类型
+ platforms: # 通知报警平台配置
+ - platform: wechat
+ urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
+ receivers: test1,test2 # 接受人企微名称
+ - platform: ding
+ urlKey: f80dad441fcd655438f4a08dcd6a # 替换
+ secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
+ receivers: 15810119805 # 钉钉账号手机号
+ - platform: lark
+ urlKey: 0d944ae7-b24a-40 # 替换
+ receivers: test1,test2 # 接受人飞书名称/openid
+ - platform: wechat
+ platformId: my-1
+ urlKey: 3a7500-1287-4bd-a798-c5c3d8b69c # 替换
+ receivers: test1,test2 # 接受人企微名称
+ - platform: ding
+ platformId: my-2
+ urlKey: f80dad441fcd655438f4a08dcd6a # 替换
+ secret: SECb5441fa6f375d5b9d21 # 替换,非sign模式可以没有此值
+ receivers: 15810119805 # 钉钉账号手机号
+ - platform: lark
+ platformId: my-3
+ urlKey: 0d944ae7-b24a-40 # 替换
+ receivers: test1,test2 # 接受人飞书名称/openid
+ tomcatTp: # tomcat web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ jettyTp: # jetty web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ undertowTp: # undertow web server线程池配置
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ hystrixTp: # hystrix 线程池配置
+ - threadPoolName: hystrix1
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ dubboTp: # dubbo 线程池配置
+ - threadPoolName: dubboTp#20880
+ corePoolSize: 100
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ rocketMqTp: # rocketmq 线程池配置
+ - threadPoolName: group1#topic1
+ corePoolSize: 200
+ maximumPoolSize: 400
+ keepAliveTime: 60
+ executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+ - threadPoolName: dtpExecutor1
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 1
+ maximumPoolSize: 1
+ queueCapacity: 5
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 80 # 报警阈值
+ platforms: [ding,wechat] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 120 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
+ - type: liveness
+ enabled: true
+ threshold: 80
+ - type: reject
+ enabled: true
+ threshold: 1
+ - type: run_timeout
+ enabled: true
+ threshold: 1
+ - type: queue_timeout
+ enabled: true
+ threshold: 1
+ - threadPoolName: orderedDtpExecutor
+ executorType: ordered
+ corePoolSize: 4
+ maximumPoolSize: 6
+ queueCapacity: 2000
+ queueType: VariableLinkedBlockingQueue
+ rejectedHandlerType: CallerRunsPolicy
+ keepAliveTime: 3
+ allowCoreThreadTimeOut: false
+ threadNamePrefix: test
+ taskWrapperNames: ["ttl", "mdc"] # 任务包装器名称,集成TaskWrapper接口
+ - threadPoolName: dtpExecutor12
+ executorType: scheduled # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 6
+ maximumPoolSize: 8
+ queueCapacity: 200
+ queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: test # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 80 # 报警阈值
+ platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 120 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
+ - type: liveness
+ enabled: true
+ threshold: 80
+ - type: reject
+ enabled: true
+ threshold: 1
+ - type: run_timeout
+ enabled: true
+ threshold: 1
+ - type: queue_timeout
+ enabled: true
+ threshold: 1
+ - threadPoolName: dtpExecutor13 # 测试当核心数为0时,ScheduledThreadPoolExecutor占用CPU问题
+ executorType: scheduled # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 0 # 0时,ScheduledThreadPoolExecutor占用CPU问题
+ maximumPoolSize: 100
+ queueCapacity: 200
+ queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 0 # 报警阈值
+ platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ interval: 1 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
+ - type: liveness
+ enabled: true
+ threshold: 80
+ - type: reject
+ enabled: true
+ threshold: 1
+ - type: run_timeout
+ enabled: true
+ threshold: 1
+ - type: queue_timeout
+ enabled: true
+ threshold: 1
+ - threadPoolName: dtpExecutor14 # 测试当核心数为0时,ScheduledThreadPoolExecutor占用CPU问题
+ executorType: scheduled # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 0 # 0时,ScheduledThreadPoolExecutor占用CPU问题
+ maximumPoolSize: 100
+ queueCapacity: 200
+ queueType: DelayQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ platformIds: [ my-1, my-2 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
+ notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+ - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
+ enabled: true
+ threshold: 0 # 报警阈值
+ platformIds: [ my-1, my-3 ] # 可选配置,不配置默认拿上层platforms配置的所以平台
# platforms: [wechat, ding] # 可选配置,不配置默认拿上层platforms配置的所以平台
- interval: 1 # 报警间隔(单位:s)
- - type: change
- enabled: true
\ No newline at end of file
+ interval: 1 # 报警间隔(单位:s)
+ - type: change
+ enabled: true
\ No newline at end of file
diff --git a/test/test-core/src/test/resources/postprocessor-dtp-dev.yml b/test/test-core/src/test/resources/postprocessor-dtp-dev.yml
index c4fc28dc0a696af9fcb5ce0143f86f4b151c6e75..b7d8daa5ae5a6ff5ce59b326ca4b3034f5949c2a 100644
--- a/test/test-core/src/test/resources/postprocessor-dtp-dev.yml
+++ b/test/test-core/src/test/resources/postprocessor-dtp-dev.yml
@@ -20,29 +20,29 @@ management:
health:
defaults:
enabled: true
-spring:
- dynamic:
- tp:
- enabled: true
- enabledCollect: true # 是否开启监控指标采集,默认false
- collectorTypes: micrometer # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
- monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s
- executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- - threadPoolName: asyncExecutor
- threadPoolAliasName: 异步线程池 # 线程池别名
- executorType: common # 线程池类型common、eager:适用于io密集型
- corePoolSize: 3
- maximumPoolSize: 10
- queueCapacity: 100
- queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
- rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
- keepAliveTime: 50
- allowCoreThreadTimeOut: false # 是否允许核心线程池超时
- threadNamePrefix: AsyncThread- # 线程名前缀
- waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
- awaitTerminationSeconds: 5 # 单位(s)
- preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
- runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
- queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
- taskWrapperNames: [ "ttl", "mdc","cta" ] # 任务包装器名称,继承TaskWrapper接口
- notifyEnabled: false # 是否开启报警,默认true
\ No newline at end of file
+
+
+dynamictp:
+ enabled: true
+ enabledCollect: true # 是否开启监控指标采集,默认false
+ collectorTypes: micrometer # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+ monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s
+ executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+ - threadPoolName: asyncExecutor
+ threadPoolAliasName: 异步线程池 # 线程池别名
+ executorType: common # 线程池类型common、eager:适用于io密集型
+ corePoolSize: 3
+ maximumPoolSize: 10
+ queueCapacity: 100
+ queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类
+ rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类
+ keepAliveTime: 50
+ allowCoreThreadTimeOut: false # 是否允许核心线程池超时
+ threadNamePrefix: AsyncThread- # 线程名前缀
+ waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池
+ awaitTerminationSeconds: 5 # 单位(s)
+ preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
+ runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
+ queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+ taskWrapperNames: [ "ttl", "mdc","cta" ] # 任务包装器名称,继承TaskWrapper接口
+ notifyEnabled: false # 是否开启报警,默认true
\ No newline at end of file
diff --git a/test/test-extension/pom.xml b/test/test-extension/pom.xml
index 42d887aaf363cd789ea83452f445a37492070dec..fd280fb1d91bacedd001b56abde6160d5bc86b32 100644
--- a/test/test-extension/pom.xml
+++ b/test/test-extension/pom.xml
@@ -3,35 +3,17 @@
4.0.0
org.dromara.dynamictp
- dynamic-tp-all
- ${revision}
- ../../pom.xml
+ dynamic-tp-test
+ 1.2.1
+ ../pom.xml
dynamic-tp-test-extension
- jar
+ pom
- test-extension
+
+ test-extension-agent
+ test-extension-limiter-redis
+
-
- UTF-8
-
-
-
-
- junit
- junit
- test
-
-
-
- org.dromara.dynamictp
- dynamic-tp-extension-agent
-
-
- org.junit.jupiter
- junit-jupiter-api
- test
-
-
diff --git a/test/test-extension/test-extension-agent/pom.xml b/test/test-extension/test-extension-agent/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..541d0ed1ecdc363ee70f81cd557807407b354379
--- /dev/null
+++ b/test/test-extension/test-extension-agent/pom.xml
@@ -0,0 +1,19 @@
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-test-extension
+ 1.2.1
+ ../pom.xml
+
+
+ dynamic-tp-test-extension-agent
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-extension-agent
+
+
+
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/AgentAwareTest.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/AgentAwareTest.java
similarity index 60%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/AgentAwareTest.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/AgentAwareTest.java
index 7525b188f070b725de4476364ae67919c0dbb69a..63d2afb46851d57d86048858ff229de84a7361e2 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/AgentAwareTest.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/AgentAwareTest.java
@@ -15,22 +15,27 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
-import org.dromara.dynamictp.core.aware.AgentAware;
+import org.dromara.dynamictp.common.util.ReflectionUtil;
+import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
import org.dromara.dynamictp.core.support.task.runnable.DtpRunnable;
-import org.junit.Test;
+import org.dromara.dynamictp.extension.agent.AgentAware;
import org.junit.jupiter.api.Assertions;
-import org.springframework.util.ReflectionUtils;
+import org.junit.jupiter.api.Test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
public class AgentAwareTest {
@Test
public void testDirectOnlyOneDtpRunnable() throws InvocationTargetException, IllegalAccessException {
- Method getDtpRunnableInstance = ReflectionUtils.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
Assertions.assertNotNull(getDtpRunnableInstance);
getDtpRunnableInstance.setAccessible(true);
@@ -39,7 +44,6 @@ public class AgentAwareTest {
};
-
MyAgentWrapper myAgentWrapper = new MyAgentWrapper(runnable, new Object());
Object result = getDtpRunnableInstance.invoke(new AgentAware(), myAgentWrapper);
Assertions.assertTrue(result == myAgentWrapper);
@@ -58,7 +62,7 @@ public class AgentAwareTest {
DtpRunnable dtpRunnable = new DtpRunnable(runnable, runnable, "test");
MyAgentWrapperTwoRunnable myAgentWrapper = new MyAgentWrapperTwoRunnable(dtpRunnable, runnable, "test");
- Method getDtpRunnableInstance = ReflectionUtils.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
Assertions.assertNotNull(getDtpRunnableInstance);
getDtpRunnableInstance.setAccessible(true);
@@ -79,7 +83,7 @@ public class AgentAwareTest {
MyAgentWrapper myAgentWrapper = new MyAgentWrapper(dtpRunnable, new Object());
MyAgentTwoPathRunnableWrapper twoPathRunnableWrapper = new MyAgentTwoPathRunnableWrapper(myAgentWrapper, new Object());
- Method getDtpRunnableInstance = ReflectionUtils.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
Assertions.assertNotNull(getDtpRunnableInstance);
getDtpRunnableInstance.setAccessible(true);
@@ -96,7 +100,7 @@ public class AgentAwareTest {
MyAgentWrapper myAgentWrapper = new MyAgentWrapper(dtpRunnable, new Object());
MyAgentWrapperChild myAgentWrapperChild = new MyAgentWrapperChild(myAgentWrapper, new Object());
- Method getDtpRunnableInstance = ReflectionUtils.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
Assertions.assertNotNull(getDtpRunnableInstance);
getDtpRunnableInstance.setAccessible(true);
@@ -117,11 +121,60 @@ public class AgentAwareTest {
MyAgentTwoPathRunnableChildWrapper myAgentTwoPathRunnableChildWrapper = new MyAgentTwoPathRunnableChildWrapper(myAgentWrapperChild,
myAgentWrapper, new Object());
- Method getDtpRunnableInstance = ReflectionUtils.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
Assertions.assertNotNull(getDtpRunnableInstance);
getDtpRunnableInstance.setAccessible(true);
Object result = getDtpRunnableInstance.invoke(new AgentAware(), myAgentTwoPathRunnableChildWrapper);
Assertions.assertTrue(result == dtpRunnable);
}
+
+ @Test
+ public void testNestRunnable() throws InvocationTargetException, IllegalAccessException {
+
+ Runnable runnable = () -> System.out.println("test");
+ DtpRunnable dtpRunnable = new DtpRunnable(runnable, runnable, "test");
+ MyAgentNestWrapper myAgentNestWrapper = new MyAgentNestWrapper(dtpRunnable);
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ getDtpRunnableInstance.setAccessible(true);
+ Object result = getDtpRunnableInstance.invoke(new AgentAware(), myAgentNestWrapper);
+ Assertions.assertTrue(dtpRunnable == dtpRunnable);
+ }
+
+ @Test
+ public void testContainNestRunnable() throws InvocationTargetException, IllegalAccessException {
+
+ Runnable runnable = () -> System.out.println("test");
+ DtpRunnable dtpRunnable = new DtpRunnable(runnable, runnable, "test");
+ MyAgentNestWrapper myAgentNestWrapper = new MyAgentNestWrapper(dtpRunnable);
+
+ MyAgentContainNestWrapper myAgentContainNestWrapper = new MyAgentContainNestWrapper(myAgentNestWrapper);
+
+ Method getDtpRunnableInstance = ReflectionUtil.findMethod(AgentAware.class, "getDtpRunnableInstance", Runnable.class);
+ getDtpRunnableInstance.setAccessible(true);
+ Object result = getDtpRunnableInstance.invoke(new AgentAware(), myAgentContainNestWrapper);
+ Assertions.assertTrue(dtpRunnable == dtpRunnable);
+ }
+
+ @Test
+ public void testScheduledThreadPoolExecutor() throws InterruptedException {
+ ScheduledExecutorService scheduledExecutorService = ThreadPoolBuilder.newBuilder()
+ .dynamic(true)
+ .corePoolSize(1)
+ .scheduled()
+ .buildScheduled();
+
+ AtomicInteger count = new AtomicInteger();
+ CountDownLatch downLatch = new CountDownLatch(3);
+ scheduledExecutorService.scheduleAtFixedRate(() -> {
+ if (count.get() >= 3) {
+ throw new RuntimeException("down");
+ }
+ count.incrementAndGet();
+ downLatch.countDown();
+ }, 1, 1, TimeUnit.SECONDS);
+
+ downLatch.await();
+ Assertions.assertEquals(3, count.get());
+ }
}
diff --git a/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentContainNestWrapper.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentContainNestWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..85d7214d5cf3ab15db7b160a20678f4c365a757d
--- /dev/null
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentContainNestWrapper.java
@@ -0,0 +1,35 @@
+/*
+ * 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.dromara.dynamictp.test.extension.agent;
+
+public class MyAgentContainNestWrapper implements Runnable {
+
+ private MyAgentNestWrapper agentNestWrapper;
+
+ public MyAgentContainNestWrapper(MyAgentNestWrapper agentNestWrapper) {
+ this.agentNestWrapper = agentNestWrapper;
+ }
+
+ @Override
+ public void run() {
+ System.out.println("before");
+ agentNestWrapper.run();
+ System.out.println("after");
+ }
+}
+
diff --git a/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentNestWrapper.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentNestWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..14853817ca459d2ecc192733f03eb0918b2c3310
--- /dev/null
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentNestWrapper.java
@@ -0,0 +1,42 @@
+/*
+ * 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.dromara.dynamictp.test.extension.agent;
+
+import org.dromara.dynamictp.core.support.task.runnable.DtpRunnable;
+
+public class MyAgentNestWrapper implements Runnable {
+
+ private MyAgentNestWrapper myAgentNestWrapper = this;
+
+ private DtpRunnable dtpRunnable;
+
+ public MyAgentNestWrapper(DtpRunnable dtpRunnable) {
+ this.dtpRunnable = dtpRunnable;
+ }
+
+ @Override
+ public void run() {
+ System.out.println("before");
+ try {
+ dtpRunnable.run();
+ } finally {
+ System.out.println("finally");
+ }
+ }
+}
+
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableChildWrapper.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableChildWrapper.java
similarity index 96%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableChildWrapper.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableChildWrapper.java
index f76d06bf788230ebb22a0de12aee48710231b0dd..e8a33e572c355cc90387ce56094b03fca1375e3c 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableChildWrapper.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableChildWrapper.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
public class MyAgentTwoPathRunnableChildWrapper implements Runnable {
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableWrapper.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableWrapper.java
similarity index 96%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableWrapper.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableWrapper.java
index 0f317266128162671dce68960773578b581bbd17..c6c07ab20259f3802e894a1609a85dfe7f08068d 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentTwoPathRunnableWrapper.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentTwoPathRunnableWrapper.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
public class MyAgentTwoPathRunnableWrapper implements Runnable {
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapper.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapper.java
similarity index 93%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapper.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapper.java
index 0217e03bd8b2ce8d40b6cd3dea7f7b3d0ef4a2ee..635ee7bb9982b680f18676a8108e88138e260217 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapper.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapper.java
@@ -15,8 +15,11 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
public class MyAgentWrapper implements Runnable {
private Runnable runnable;
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperChild.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperChild.java
similarity index 95%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperChild.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperChild.java
index 91117d315653ef1be7d5b2ee8f8bfd55db129aeb..be57472cbd9ed84aa349f02b6f9dd1dea45f35a4 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperChild.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperChild.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
public class MyAgentWrapperChild extends MyAgentWrapper {
public MyAgentWrapperChild(MyAgentWrapper runnable, Object busiObj) {
diff --git a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperTwoRunnable.java b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperTwoRunnable.java
similarity index 96%
rename from test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperTwoRunnable.java
rename to test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperTwoRunnable.java
index c93c647dd3f65de91c1cfde25f132f0d8a311ea5..4c72a4327f5436855b7cf3661237187a1e5c9a25 100644
--- a/test/test-extension/src/test/java/org/dromara/dynamictp/agent/MyAgentWrapperTwoRunnable.java
+++ b/test/test-extension/test-extension-agent/src/test/java/org/dromara/dynamictp/test/extension/agent/MyAgentWrapperTwoRunnable.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.dromara.dynamictp.agent;
+package org.dromara.dynamictp.test.extension.agent;
public class MyAgentWrapperTwoRunnable implements Runnable {
diff --git a/test/test-extension/test-extension-limiter-redis/pom.xml b/test/test-extension/test-extension-limiter-redis/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..47ac76affda5b15a566356e68c5a2ff410e3827f
--- /dev/null
+++ b/test/test-extension/test-extension-limiter-redis/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+
+ org.dromara.dynamictp
+ dynamic-tp-test-extension
+ 1.2.1
+ ../pom.xml
+
+
+ dynamic-tp-test-extension-limiter-redis
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring-boot-starter-common
+
+
+
+ org.springframework
+ spring-aspects
+ test
+
+
+ org.dromara.dynamictp
+ dynamic-tp-spring-boot-starter-extension-limiter-redis
+ test
+
+
+ org.apache.commons
+ commons-pool2
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
\ No newline at end of file
diff --git a/test/test-extension/test-extension-limiter-redis/src/test/java/org/dromara/dynamictp/test/extension/limiter/redis/RedisRateLimiterTest.java b/test/test-extension/test-extension-limiter-redis/src/test/java/org/dromara/dynamictp/test/extension/limiter/redis/RedisRateLimiterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..627819917855d460eefb3cfa04427c43617d9821
--- /dev/null
+++ b/test/test-extension/test-extension-limiter-redis/src/test/java/org/dromara/dynamictp/test/extension/limiter/redis/RedisRateLimiterTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.dromara.dynamictp.test.extension.limiter.redis;
+
+import lombok.val;
+import org.dromara.dynamictp.extension.limiter.redis.ratelimiter.RedisRateLimiter;
+import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@SpringBootTest(classes = RedisRateLimiterTest.class)
+@ExtendWith(SpringExtension.class)
+@EnableAutoConfiguration
+@EnableDynamicTp
+class RedisRateLimiterTest {
+
+ @Resource
+ private RedisRateLimiter> redisScriptRateLimiter;
+
+ @Test
+ void testRedisRateLimiterCheck() throws InterruptedException {
+ for (int i = 0; i < 6; i++) {
+ TimeUnit.SECONDS.sleep(1);
+ val res = redisScriptRateLimiter.tryPass("rate-limiter", 120, 5);
+ System.out.println(res);
+ }
+ }
+}
+
+
+
diff --git a/test/test-extension/test-extension-limiter-redis/src/test/resources/application.yml b/test/test-extension/test-extension-limiter-redis/src/test/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..51d2495e1c16bc0a929bb172cbb8f3299e11f38d
--- /dev/null
+++ b/test/test-extension/test-extension-limiter-redis/src/test/resources/application.yml
@@ -0,0 +1,7 @@
+spring:
+ redis:
+ cluster:
+ nodes:
+ - 127.0.0.1:6379
+ - 127.0.0.1:6379
+ - 127.0.0.1:6379
\ No newline at end of file
diff --git a/test/test-logging/pom.xml b/test/test-logging/pom.xml
index 503686e859718ea60119cdb96ece30f982faddfd..1abde553393859b86200c873ba50dfdd28e0e995 100644
--- a/test/test-logging/pom.xml
+++ b/test/test-logging/pom.xml
@@ -5,7 +5,7 @@
org.dromara.dynamictp
dynamic-tp-test
- ${revision}
+ 1.2.1
../pom.xml
dynamic-tp-test-logging