feat:添加wps相关代码
This commit is contained in:
@@ -132,6 +132,11 @@ public interface AppConstant {
|
|||||||
*/
|
*/
|
||||||
String APPLICATION_FILE_NAME =APPLICATION_NAME_PREFIX +"file";
|
String APPLICATION_FILE_NAME =APPLICATION_NAME_PREFIX +"file";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 三方服务模块名称
|
||||||
|
*/
|
||||||
|
String APPLICATION_OPENAPI_NAME =APPLICATION_NAME_PREFIX +"openapi";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开发环境
|
* 开发环境
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springblade</groupId>
|
||||||
|
<artifactId>BladeX-Tool</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>blade-starter-threadpool</artifactId>
|
||||||
|
<name>${project.artifactId}</name>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara.dynamictp</groupId>
|
||||||
|
<artifactId>dynamic-tp-spring-cloud-starter-nacos</artifactId>
|
||||||
|
<version>1.1.9.1-3.x</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springblade</groupId>
|
||||||
|
<artifactId>blade-core-auto</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
+145
@@ -0,0 +1,145 @@
|
|||||||
|
/*
|
||||||
|
* 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.springblade.core.threadpool.config;
|
||||||
|
|
||||||
|
import org.dromara.dynamictp.core.executor.DtpExecutor;
|
||||||
|
import org.dromara.dynamictp.core.executor.OrderedDtpExecutor;
|
||||||
|
import org.dromara.dynamictp.core.support.DynamicTp;
|
||||||
|
import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
|
||||||
|
import org.dromara.dynamictp.core.support.ThreadPoolCreator;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static org.dromara.dynamictp.common.em.QueueTypeEnum.MEMORY_SAFE_LINKED_BLOCKING_QUEUE;
|
||||||
|
import static org.dromara.dynamictp.common.em.RejectedTypeEnum.CALLER_RUNS_POLICY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Redick01
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @Configuration
|
||||||
|
public class ThreadPoolConfiguration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link DynamicTp} 注解定义普通juc线程池,会享受到该框架增强能力,注解名称优先级高于方法名
|
||||||
|
*
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@DynamicTp("jucThreadPoolExecutor")
|
||||||
|
@Bean
|
||||||
|
public ThreadPoolExecutor jucThreadPoolExecutor() {
|
||||||
|
return (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link DynamicTp} 注解定义spring线程池,会享受到该框架增强能力,注解名称优先级高于方法名
|
||||||
|
*
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@DynamicTp("threadPoolTaskExecutor")
|
||||||
|
@Bean
|
||||||
|
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
|
||||||
|
return new ThreadPoolTaskExecutor();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link ThreadPoolCreator} 快速创建一些简单配置的线程池,使用默认参数
|
||||||
|
* tips: 建议直接在配置中心配置就行,不用@Bean声明
|
||||||
|
*
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public DtpExecutor dtpExecutor0() {
|
||||||
|
return ThreadPoolCreator.createDynamicFast("dtpExecutor0");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link ThreadPoolBuilder} 设置详细参数创建动态线程池
|
||||||
|
* tips: 建议直接在配置中心配置就行,不用@Bean声明
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public ThreadPoolExecutor dtpExecutor1() {
|
||||||
|
return ThreadPoolBuilder.newBuilder()
|
||||||
|
.threadPoolName("dtpExecutor1")
|
||||||
|
.threadFactory("test-dtp-common")
|
||||||
|
.corePoolSize(10)
|
||||||
|
.maximumPoolSize(15)
|
||||||
|
.keepAliveTime(40)
|
||||||
|
.timeUnit(TimeUnit.SECONDS)
|
||||||
|
.workQueue(MEMORY_SAFE_LINKED_BLOCKING_QUEUE.getName(), 2000)
|
||||||
|
.buildDynamic();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link ThreadPoolBuilder} 设置详细参数创建动态线程池
|
||||||
|
* eager,参考tomcat线程池设计,适用于处理io密集型任务场景,具体参数可以看代码注释
|
||||||
|
* tips: 建议直接在配置中心配置就行,不用@Bean声明
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public DtpExecutor eagerDtpExecutor() {
|
||||||
|
return ThreadPoolBuilder.newBuilder()
|
||||||
|
.threadPoolName("eagerDtpExecutor")
|
||||||
|
.threadFactory("test-eager")
|
||||||
|
.corePoolSize(2)
|
||||||
|
.maximumPoolSize(4)
|
||||||
|
.queueCapacity(2000)
|
||||||
|
.eager()
|
||||||
|
.buildDynamic();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link ThreadPoolBuilder} 设置详细参数创建动态线程池
|
||||||
|
* ordered,适用于处理有序任务场景,任务要实现Ordered接口,具体参数可以看代码注释
|
||||||
|
* tips: 建议直接在配置中心配置就行,不用@Bean声明
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public OrderedDtpExecutor orderedDtpExecutor() {
|
||||||
|
return ThreadPoolBuilder.newBuilder()
|
||||||
|
.threadPoolName("orderedDtpExecutor")
|
||||||
|
.threadFactory("test-ordered")
|
||||||
|
.corePoolSize(4)
|
||||||
|
.maximumPoolSize(4)
|
||||||
|
.queueCapacity(2000)
|
||||||
|
.buildOrdered();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过{@link ThreadPoolBuilder} 设置详细参数创建线程池
|
||||||
|
* scheduled,适用于处理定时任务场景,具体参数可以看代码注释
|
||||||
|
* tips: 建议直接在配置中心配置就行,不用@Bean声明
|
||||||
|
* @return 线程池实例
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public ScheduledExecutorService scheduledDtpExecutor() {
|
||||||
|
return ThreadPoolBuilder.newBuilder()
|
||||||
|
.threadPoolName("scheduledDtpExecutor")
|
||||||
|
.corePoolSize(2)
|
||||||
|
.threadFactory("test-scheduled")
|
||||||
|
.rejectedExecutionHandler(CALLER_RUNS_POLICY.getName())
|
||||||
|
.buildScheduled();
|
||||||
|
}
|
||||||
|
}
|
||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* 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.springblade.core.threadpool.wrapper;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper;
|
||||||
|
import org.springblade.core.auto.service.AutoService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CustomTaskWrapper related
|
||||||
|
*
|
||||||
|
* @author yanhom
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
@AutoService(TaskWrapper.class)
|
||||||
|
@Slf4j
|
||||||
|
public class CustomTaskWrapper implements TaskWrapper {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String name() {
|
||||||
|
return "custom";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Runnable wrap(Runnable runnable) {
|
||||||
|
return new MyRunnable(runnable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MyRunnable implements Runnable {
|
||||||
|
|
||||||
|
private final Runnable runnable;
|
||||||
|
|
||||||
|
public MyRunnable(Runnable runnable) {
|
||||||
|
this.runnable = runnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
log.info("before run");
|
||||||
|
runnable.run();
|
||||||
|
log.info("after run");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
# 动态线程池配置文件,建议单独开一个文件放到配置中心,字段详解看readme介绍
|
||||||
|
spring:
|
||||||
|
dynamic:
|
||||||
|
tp:
|
||||||
|
enabled: true
|
||||||
|
enabledBanner: true # 是否开启banner打印,默认true
|
||||||
|
enabledCollect: false # 是否开启监控指标采集,默认false
|
||||||
|
collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
|
||||||
|
logPath: ${user.home}/dynamic-tp/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
|
||||||
|
- threadPoolName: orderedDtpExecutor
|
||||||
|
executorType: ordered
|
||||||
|
corePoolSize: 4
|
||||||
|
maximumPoolSize: 6
|
||||||
|
queueCapacity: 2000
|
||||||
|
queueType: VariableLinkedBlockingQueue
|
||||||
|
rejectedHandlerType: CallerRunsPolicy
|
||||||
|
keepAliveTime: 50
|
||||||
|
allowCoreThreadTimeOut: false
|
||||||
|
threadNamePrefix: test
|
||||||
@@ -120,6 +120,7 @@
|
|||||||
<module>blade-starter-trace</module>
|
<module>blade-starter-trace</module>
|
||||||
<module>blade-starter-transaction</module>
|
<module>blade-starter-transaction</module>
|
||||||
<module>blade-starter-xss</module>
|
<module>blade-starter-xss</module>
|
||||||
|
<module>blade-starter-threadpool</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
@@ -941,6 +942,11 @@
|
|||||||
<artifactId>hutool-all</artifactId>
|
<artifactId>hutool-all</artifactId>
|
||||||
<version>5.8.27</version>
|
<version>5.8.27</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springblade</groupId>
|
||||||
|
<artifactId>blade-starter-threadpool</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|||||||
Reference in New Issue
Block a user