# dingtalk-pusher
**Repository Path**: TTTTTTC/dingtalk-pusher
## Basic Information
- **Project Name**: dingtalk-pusher
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-09
- **Last Updated**: 2025-12-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🚀 DingTalk Pusher
**企业级钉钉消息推送中间件**
[](LICENSE)
[](https://www.oracle.com/java/technologies/javase-downloads.html)
[](https://spring.io/projects/spring-boot)
[简体中文](README.md) | [English](README_EN.md)
---
## 📖 项目简介
DingTalk Pusher 是一个企业级的钉钉消息推送中间件,参考阿里巴巴 Druid 项目的模块化架构设计。它提供了灵活的消息推送能力,支持通过 SQL 查询动态生成消息内容,并定时推送到钉钉。
**适用场景:**
- 📊 定时数据报表推送(日报、周报、月报)
- ⚠️ 业务异常告警通知
- 📈 关键指标监控提醒
- 🔔 系统状态通知
- 📝 自动化运营消息
## ✨ 核心特性
- 🎯 **多种使用方式**
- Spring Boot Starter - 快速集成到现有项目
- 独立服务部署 - 作为独立中间件运行
- Web 管理后台 - 可视化配置管理
- 💡 **灵活的消息生成**
- 支持 SQL 查询动态生成消息
- 支持消息模板变量替换
- 支持多数据源查询
- 🔄 **强大的调度能力**
- 基于 Quartz 的定时调度
- 支持 CRON 表达式
- 任务状态实时监控
- 🗄️ **多数据源支持**
- MySQL、PostgreSQL、Oracle、SQL Server
- 基于 Druid 连接池
- 支持动态数据源配置
- 📱 **多种推送方式**
- 钉钉机器人推送
- 钉钉工作通知推送
- 支持单用户/多用户/群组推送
- 🔌 **高度可扩展**
- SPI 扩展机制
- 自定义数据源提供者
- 自定义消息生成器
## 🏗️ 模块架构
```
dingtalk-pusher
├── dingtalk-pusher-core # 核心模块 - 消息推送引擎
├── dingtalk-pusher-spring-boot-starter # Spring Boot Starter - 快速集成
├── dingtalk-pusher-server # 独立服务 - 独立部署运行
└── dingtalk-pusher-admin # Web管理后台 - 可视化管理界面
```
## 🚀 快速开始
### 方式一:作为 SDK 集成(推荐)
#### 1. 添加依赖
```xml
com.miaoqu
dingtalk-pusher-spring-boot-starter
1.0.0-SNAPSHOT
```
#### 2. 配置文件
在 `application.yml` 中添加配置:
```yaml
dingtalk:
pusher:
enabled: true
# 钉钉配置
dingtalk:
push-mode: ROBOT # ROBOT(机器人) 或 WORK_NOTICE(工作通知)
robot-webhook: https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN
robot-secret: YOUR_SECRET
# 数据源配置
datasources:
- name: primary
url: jdbc:mysql://localhost:3306/your_database
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
```
#### 3. 启动应用
```java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
### 方式二:使用 Web 管理后台
#### 1. 编译项目
```bash
git clone https://github.com/your-username/dingtalk-pusher.git
cd dingtalk-pusher
mvn clean package -DskipTests
```
#### 2. 启动管理后台
```bash
cd dingtalk-pusher-admin/target
java -jar dingtalk-pusher-admin-1.0.0-SNAPSHOT.jar
```
#### 3. 访问管理界面
打开浏览器访问:http://localhost:8080
默认账号:`admin` / `admin123`
#### 4. 在界面中配置
- 配置数据源
- 配置钉钉机器人
- 创建推送任务
- 启动任务







### 方式三:独立服务部署
```bash
cd dingtalk-pusher-server/target
java -jar dingtalk-pusher-server-1.0.0-SNAPSHOT.jar
```
通过修改 `application.yml` 配置文件来管理任务。
## 📚 使用示例
### 示例 1:每日订单统计推送
```yaml
tasks:
- name: daily-order-stats
cron: "0 0 9 * * ?"
datasource: primary
sql: |
SELECT
COUNT(*) as total_orders,
SUM(amount) as total_amount,
AVG(amount) as avg_amount
FROM orders
WHERE DATE(create_time) = CURDATE()
message-template: |
📊 每日订单统计
━━━━━━━━━━━━━━━
订单总数: ${total_orders}
订单总额: ¥${total_amount}
平均订单: ¥${avg_amount}
receivers: ["manager001"]
```
### 示例 2:库存预警
```yaml
tasks:
- name: inventory-alert
cron: "0 0 10,16 * * ?" # 每天10点和16点
datasource: primary
sql: |
SELECT
product_name,
current_stock,
min_stock
FROM products
WHERE current_stock < min_stock
message-template: |
⚠️ 库存预警
以下商品库存不足:
${product_name}: 当前 ${current_stock},最低 ${min_stock}
receivers: ["warehouse001"]
```
### 示例 3:编程式动态任务
```java
@Service
public class CustomTaskService {
@Autowired
private DingTalkPusherEngine engine;
public void createDynamicTask() {
TaskConfig task = new TaskConfig();
task.setName("custom-task");
task.setCron("0 */5 * * * ?"); // 每5分钟
task.setDatasource("primary");
task.setSql("SELECT COUNT(*) as count FROM users WHERE status = 'online'");
task.setMessageTemplate("在线用户数: ${count}");
task.setReceivers(Arrays.asList("admin001"));
engine.addTask(task);
}
public void removeTask() {
engine.removeTask("custom-task");
}
}
```
## 📋 CRON 表达式参考
| 表达式 | 说明 |
|--------|------|
| `0 0 9 * * ?` | 每天 9:00 |
| `0 */10 * * * ?` | 每 10 分钟 |
| `0 0 12 * * MON-FRI` | 工作日中午 12:00 |
| `0 0 0 1 * ?` | 每月 1 号 0:00 |
| `0 0 9-18 * * ?` | 每天 9:00-18:00 每小时 |
## 🔧 配置说明
### 钉钉机器人配置
1. 在钉钉群中添加自定义机器人
2. 获取 Webhook 地址和加签密钥
3. 配置到系统中
详见:[钉钉配置指南](docs/DINGTALK_CONFIG.md)
### 数据源配置
支持多种数据库:
```yaml
datasources:
- name: mysql-db
url: jdbc:mysql://localhost:3306/db
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
- name: postgres-db
url: jdbc:postgresql://localhost:5432/db
username: postgres
password: password
driver-class-name: org.postgresql.Driver
```
详见:[数据库配置指南](docs/DATABASE.md)
## 📖 文档
- [架构设计](docs/ARCHITECTURE.md)
- [使用指南](docs/USAGE.md)
- [管理后台使用](docs/ADMIN.md)
- [钉钉配置](docs/DINGTALK_CONFIG.md)
- [数据库配置](docs/DATABASE.md)
- [会话配置](docs/SESSION_CONFIG.md)
- [分页搜索](docs/PAGINATION_SEARCH.md)
- [故障排查](docs/TROUBLESHOOTING.md)
- [JDK 1.8 兼容性](docs/JDK8_COMPATIBILITY.md)
## 🛠️ 系统要求
- **JDK**: 1.8 或更高版本
- **Maven**: 3.3 或更高版本
- **数据库**(可选): MySQL 5.7+ / PostgreSQL 9.6+ / Oracle 11g+ / SQL Server 2012+
## 🔌 扩展开发
### 自定义数据源提供者
```java
public class CustomDataSourceProvider implements DataSourceProvider {
@Override
public DataSource createDataSource(Map config) {
// 实现自定义数据源创建逻辑
return customDataSource;
}
@Override
public String getName() {
return "custom";
}
}
```
在 `META-INF/services/com.miaoqu.dingtalk.core.spi.DataSourceProvider` 中注册。
### 自定义消息生成器
```java
public class CustomMessageGenerator implements MessageGenerator {
@Override
public String generate(Map context) {
// 实现自定义消息生成逻辑
return customMessage;
}
@Override
public String getType() {
return "custom";
}
}
```
## 🤝 贡献指南
欢迎贡献代码、报告问题或提出建议!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
## 📄 开源协议
本项目采用 [Apache License 2.0](LICENSE) 开源协议。
## 💬 联系方式
- 提交 Issue: [GitHub Issues](https://github.com/your-username/dingtalk-pusher/issues)
- 提交 PR: [Pull Requests](https://github.com/your-username/dingtalk-pusher/pulls)
## 🙏 致谢
- 感谢 [Alibaba Druid](https://github.com/alibaba/druid) 项目提供的架构设计灵感
- 感谢 [Spring Boot](https://spring.io/projects/spring-boot) 提供的优秀框架
- 感谢 [Quartz](http://www.quartz-scheduler.org/) 提供的调度能力
## ⭐ Star History
如果这个项目对你有帮助,请给个 Star ⭐️
---
Made with ❤️ by DingTalk Pusher Team