{"adoption": {"forks": 859, "observed_at": "2026-08-28T04:09:00.194798+00:00", "stars": 4800}, "canonical_url": "https://ross.abutalabs.com/products/dynamic-tp", "card": {"archived": false, "artifact_type": "framework", "description": "A lightweight dynamic thread pool framework with built-in monitoring and alerting, unified third-party thread pool management, and support for popular configuration centers (Nacos, Apollo, Zookeeper, Consul, and Etcd), extensible via SPI。", "domain": ["backend", "monitoring", "microservices", "developer-tools"], "enriched": true, "function": ["monitoring", "alerting", "configuration-management", "middleware", "concurrency", "developer-tools"], "health_score": 92, "homepage": "https://dynamictp.cn", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["dromara/dynamic-tp"], "name": "dromara/dynamic-tp", "platform": ["jvm", "self-hosted"], "pushed_at": "2026-08-21T11:35:17+00:00", "repo": "dromara/dynamic-tp", "stars": 4800, "tags": ["thread-pool", "dynamic-configuration", "nacos", "apollo", "zookeeper", "consul", "etcd", "spring-boot", "dubbo", "rocketmq", "grpc", "micrometer", "spi-extensible", "devops", "spring"], "topics": ["java", "dynamic-threadpool", "spring", "nacos", "apollo", "micrometer", "consul", "springcloud", "threadpool", "threadpoolexecutor", "thread", "zookeeper", "dubbo", "rocketmq", "grpc", "monitor", "springboot"], "urls": [], "use_cases": ["dynamically adjust thread pool parameters at runtime without redeploying", "monitor thread pool metrics and get alerts on queue capacity or rejections", "manage thread pools of middleware like Dubbo, RocketMQ, and Tomcat from one place", "tune core pool size and queue size via a configuration center", "send thread pool alerts to DingTalk, WeCom, Feishu, or email", "pass context like MDC or TransmittableThreadLocal across pool tasks", "gracefully shut down thread pools on Spring container shutdown"], "what_it_is": "DynamicTp is a lightweight Java framework for managing dynamically configurable, monitored thread pools based on configuration centers like Nacos, Apollo, Zookeeper, Consul, and Etcd. It provides runtime parameter tuning, alerting, metrics collection via Micrometer/JSON log/JMX, and unified management of third-party middleware thread pools (Tomcat, Dubbo, RocketMQ, gRPC, etc.) with SPI extensibility.", "when_to_avoid": ["you are not on the JVM (e.g., Go, Python, .NET services)", "you use very old Spring Boot versions (1.x, 2.1, 2.2) without willingness to upgrade", "you need a simple fixed thread pool with no dynamic tuning or monitoring needs"], "when_to_choose": ["you run Java/Spring services with ThreadPoolExecutor and need runtime tuning", "you use a supported config center (Nacos, Apollo, Zookeeper, Consul, Etcd, Polaris)", "you want built-in monitoring and alerting for thread pools with zero code intrusion", "you need unified management of many middleware thread pools"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/dynamic-tp", "repo": "dromara/dynamic-tp", "role": "main", "score": 74}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:00.194798+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:18:37.674602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf995a513d8b196daa946c221e6cfa12584e8ee6f9800bd5f4d69557cb741faa", "fetched_at": "2026-08-28T04:09:00.194798+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/dynamic-tp"}, {"content_hash": "b77f6533e868eb620ed4b640ab6832bb38e63da93d6a5eac971a1e8e5e5b9058", "fetched_at": "2026-08-29T09:01:43.865438+00:00", "kind": "homepage", "missing": false, "url": "https://dynamictp.cn"}, {"content_hash": "71ed8ee24052b5226059eec62e5238ec8a2e74b509cac6c34b3e9456f3c4a013", "fetched_at": "2026-08-29T09:01:43.874757+00:00", "kind": "site_page", "missing": false, "url": "https://dynamictp.cn/guide/other/faq.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 28}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1699, "days_push": 12, "days_rel": 463, "gap_med": 49.5, "n_releases_24m": 5}, "score": 74, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}