diff --git a/README.md b/README.md index bead22eca4f5babe129f12cc58b8b88a9a58f387..bcf3c66c654a7d667475a41966bdbf0b7a1928e1 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,24 @@ # Lancer-Dynamic-Thread-Pool -一个基于Spring Boot的动态线程池管理组件,提供线程池参数动态调整、监控和告警功能。 +## 项目简介 +Lancer-Dynamic-Thread-Pool 是一个基于 Spring Boot 的动态线程池管理组件,支持线程池配置的动态更新、监控和管理。适用于需要灵活调整线程池参数以优化系统性能的场景。 ## 功能特点 -- 支持线程池参数动态调整,无需重启应用 -- 提供可视化管理界面,实时监控线程池状态 -- 支持自定义告警规则,及时发现线程池异常(代码已注释) -- 轻量级设计,易于集成到现有Spring Boot项目 -- 自定义任务队列实现更改各种参数 +- **动态配置更新**:无需重启应用即可更新线程池配置。 +- **线程池监控**:提供线程池状态监控接口,包括活跃线程数、队列大小等信息。 +- **优雅关闭**:支持线程池的优雅关闭和强制关闭。 +- **拒绝策略管理**:支持多种拒绝策略配置。 +- **Web 控制台**:提供基于 HTML 的可视化线程池管理界面。 ## 快速开始 ### 环境要求 -- JDK 17 +- Java 8 或更高版本 - Spring Boot 2.x +- Maven 3.x -### Maven依赖 +### Maven 依赖 +在 `pom.xml` 中添加以下依赖: ```xml com.lancer @@ -25,52 +28,97 @@ ``` ### 配置示例 -在application.yaml中添加配置: +在 `application.yml` 中配置线程池参数: ```yaml lancer: dynamic: thread-pool: - poolName: lancer-thread-pool - queueCapacity: 50 + enable: true + pool-name: default-pool + core-pool-size: 10 + max-pool-size: 20 + keep-alive-time: 60 + unit: SECONDS + queue-capacity: 200 + reject-enum: CALLER_RUNS ``` ## 使用方法 -### 监控配置 -启动应用后,访问 http://localhost:8080/threadPool.html 即可打开管理界面。 -### 代码调用 +### 启动应用 +确保配置正确后,启动 Spring Boot 应用即可自动加载线程池配置。 +### 获取线程池实例 +通过 `ThreadPoolServiceImpl` 获取线程池实例并提交任务: +```java +@Autowired +private ThreadPoolServiceImpl threadPoolService; + +public void executeTask(Runnable task) { + ThreadPoolExecutor executor = threadPoolService.getThreadPoolByName("default-pool"); + executor.execute(task); +} +``` + +### 动态更新配置 +通过 `ThreadPoolManage` 更新线程池配置: +```java +@Autowired +private ThreadPoolManage threadPoolManager; + +public void updateThreadPool(ThreadPoolConfig config) { + threadPoolManager.addOrUpdateThreadPool(config); +} +``` + +## 监控配置 + +### 访问监控接口 +提供 RESTful 接口用于查询和管理线程池: +- **查询线程池列表** + `GET /lancer-thread-pool/monitor/queryList` + +- **查询线程池详情** + `GET /lancer-thread-pool/monitor/queryDetails?poolName=default-pool` + +- **关闭线程池** + `GET /lancer-thread-pool/monitor/shutdown?poolName=default-pool&isForceStop=false` + +- **创建或更新线程池** + `POST /lancer-thread-pool/monitor/buildOrUpdate` + 请求体格式: + ```json + { + "poolName": "new-pool", + "corePoolSize": 15, + "maxPoolSize": 25, + "keepAliveTime": 120, + "unit": "SECONDS", + "queueCapacity": 300, + "rejectEnum": "REJECT" + } + ``` + +### 可视化监控页面 +访问 `threadPool.html` 页面进行可视化线程池管理: +``` +http://localhost:8080/threadPool.html +``` + +## 代码调用示例 ```java - @Autowired - ThreadPoolServiceImpl dynamicThreadPool; - - @Override - public void run(String... args) throws Exception { - ThreadPoolExecutor s1 = dynamicThreadPool.getThreadPoolByName("lancer-thread-pool"); - List> list = new ArrayList<>(); - for (int i = 0; i < 223; i++) { - CompletableFuture future = CompletableFuture.supplyAsync(()->{ - try { - Random random = new Random(); - int min = 1000; - int max = 3000; - int randomNumber = random.nextInt(max - min) + min; - Thread.sleep(randomNumber); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - return "hello world"; - },s1); - list.add(future); - } - // 等待所有任务完成 - CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).join(); - System.out.println(list); - } +// 获取线程池实例 +ThreadPoolExecutor executor = threadPoolService.getThreadPoolByName("default-pool"); + +// 提交任务 +executor.execute(() -> { + System.out.println("Task is running..."); +}); + +// 关闭线程池 +threadPoolService.shutdownThreadPool("default-pool"); ``` ## 许可证 -本项目基于MIT许可证开源 - 详见LICENSE文件 -![输入图片说明](https://foruda.gitee.com/images/1751010203560712869/cb9aa75e_10104977.png "屏幕截图") -![输入图片说明](https://foruda.gitee.com/images/1751008570589798189/5e2e0c6d_10104977.png "屏幕截图") +本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 \ No newline at end of file