Skip to content

Commit 73ec03b

Browse files
committed
feat: 集成 dynamicTp
1 parent b5fb0e8 commit 73ec03b

7 files changed

Lines changed: 149 additions & 2 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@
3434
- [x] 集成 pagehelper
3535
- [x] 集成 Spring Boot Admin 监控
3636
- [x] 集成 TransmittableThreadLocal
37-
- [ ] 集成 dynamicTp
37+
- [x] 集成 dynamicTp

application/src/main/java/top/cadecode/uniboot/UniBootApplication.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package top.cadecode.uniboot;
22

3+
import com.dtp.core.spring.EnableDynamicTp;
34
import org.mybatis.spring.annotation.MapperScan;
45
import org.springframework.boot.SpringApplication;
56
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -9,8 +10,9 @@
910
import org.springframework.context.annotation.EnableAspectJAutoProxy;
1011

1112
/**
12-
*
13+
* 启动类
1314
*/
15+
@EnableDynamicTp
1416
@MapperScan("top.cadecode.**.mapper")
1517
@EnableAspectJAutoProxy(exposeProxy = true)
1618
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package top.cadecode.uniboot.demo.controller;
2+
3+
import com.dtp.core.thread.DtpExecutor;
4+
import io.swagger.annotations.Api;
5+
import io.swagger.annotations.ApiOperation;
6+
import lombok.RequiredArgsConstructor;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.springframework.web.bind.annotation.PostMapping;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
import top.cadecode.uniboot.common.annotation.ApiFormat;
12+
13+
/**
14+
* dynamic-tp 测试
15+
*
16+
* @author Cade Li
17+
* @date 2023/3/15
18+
*/
19+
@ApiFormat
20+
@Slf4j
21+
@RequiredArgsConstructor
22+
@Api(tags = "dynamic-tp 测试")
23+
@RestController
24+
@RequestMapping("demo/tp")
25+
public class DynamicTpController {
26+
27+
private final DtpExecutor asyncExecutor;
28+
29+
@ApiOperation("测试 reject 通知")
30+
@PostMapping("test_reject")
31+
public String testReject() {
32+
// 提交 1000 个任务,测试 reject
33+
for (int i = 0; i < 10000; i++) {
34+
int finalI = i;
35+
asyncExecutor.execute(() -> {
36+
log.info("task {}", finalI);
37+
});
38+
}
39+
return "OK";
40+
}
41+
}

application/src/main/resources/application.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,23 @@ spring:
5050
wall:
5151
config:
5252
multi-statement-allow: true
53+
dynamic:
54+
tp:
55+
collectorTypes: logging
56+
logPath: /log/${uni-boot.config.name}
57+
monitorInterval: 10
58+
executors:
59+
- threadPoolName: asyncExecutor
60+
thread-name-prefix: asyncExecutor
61+
corePoolSize: 6
62+
maximumPoolSize: 8
63+
queueCapacity: 1000
64+
queueType: VariableLinkedBlockingQueue
65+
rejectedHandlerType: CallerRunsPolicy
66+
keepAliveTime: 50
67+
waitForTasksToCompleteOnShutdown: true
68+
awaitTerminationSeconds: 5
69+
notifyEnabled: false
5370

5471
# pagehelper
5572
pagehelper:

common/pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,14 @@
113113
<groupId>com.alibaba</groupId>
114114
<artifactId>transmittable-thread-local</artifactId>
115115
</dependency>
116+
<!--dynamicTp-->
117+
<dependency>
118+
<groupId>cn.dynamictp</groupId>
119+
<artifactId>dynamic-tp-spring-boot-starter-common</artifactId>
120+
</dependency>
121+
<dependency>
122+
<groupId>cn.dynamictp</groupId>
123+
<artifactId>dynamic-tp-spring-boot-starter-extension-notify-email</artifactId>
124+
</dependency>
116125
</dependencies>
117126
</project>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package top.cadecode.uniboot.framework.config;
2+
3+
import com.dtp.core.thread.DtpExecutor;
4+
import lombok.RequiredArgsConstructor;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.scheduling.annotation.AsyncConfigurer;
10+
import org.springframework.scheduling.annotation.SchedulingConfigurer;
11+
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
12+
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
13+
14+
import java.util.concurrent.Executor;
15+
16+
/**
17+
* 线程池设置
18+
*
19+
* @author Cade Li
20+
* @date 2023/3/15
21+
*/
22+
@Slf4j
23+
@Configuration
24+
public class ThreadPoolConfig {
25+
26+
/**
27+
* Spring 定时任务线程池
28+
*/
29+
@Bean(name = "taskScheduler", destroyMethod = "shutdown")
30+
public ThreadPoolTaskScheduler taskScheduler() {
31+
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
32+
scheduler.setPoolSize(6);
33+
scheduler.setThreadNamePrefix("taskScheduler");
34+
scheduler.setWaitForTasksToCompleteOnShutdown(true);
35+
scheduler.setAwaitTerminationSeconds(5);
36+
return scheduler;
37+
}
38+
39+
40+
@Slf4j
41+
@RequiredArgsConstructor
42+
@Configuration
43+
public static class ExecutorConfig implements AsyncConfigurer, SchedulingConfigurer {
44+
45+
private final DtpExecutor asyncExecutor;
46+
private final ThreadPoolTaskScheduler taskScheduler;
47+
48+
@Override
49+
public Executor getAsyncExecutor() {
50+
return asyncExecutor;
51+
}
52+
53+
@Override
54+
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
55+
return (throwable, method, objects) -> {
56+
log.error("异步任务执行出现异常, message {}, method {}, params {}",
57+
throwable, method, objects);
58+
};
59+
60+
}
61+
62+
@Override
63+
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
64+
taskRegistrar.setTaskScheduler(taskScheduler);
65+
}
66+
}
67+
}

pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<dynamic-ds.version>3.6.0</dynamic-ds.version>
4545
<sba.version>2.6.11</sba.version>
4646
<ttl.version>2.12.2</ttl.version>
47+
<dynamic-tp.version>1.1.0</dynamic-tp.version>
4748
</properties>
4849

4950
<dependencies>
@@ -159,6 +160,16 @@
159160
<artifactId>transmittable-thread-local</artifactId>
160161
<version>${ttl.version}</version>
161162
</dependency>
163+
<dependency>
164+
<groupId>cn.dynamictp</groupId>
165+
<artifactId>dynamic-tp-spring-boot-starter-common</artifactId>
166+
<version>${dynamic-tp.version}</version>
167+
</dependency>
168+
<dependency>
169+
<groupId>cn.dynamictp</groupId>
170+
<artifactId>dynamic-tp-spring-boot-starter-extension-notify-email</artifactId>
171+
<version>${dynamic-tp.version}</version>
172+
</dependency>
162173
</dependencies>
163174
</dependencyManagement>
164175

0 commit comments

Comments
 (0)