195 lines
5.9 KiB
Markdown
195 lines
5.9 KiB
Markdown
# dailyLove
|
||
|
||
## 公众号每日问候推送系统
|
||
|
||
一个基于 Spring Boot 4 和响应式编程的微信公众号每日问候推送系统,可定时推送天气、节日、纪念日等个性化信息。
|
||
|
||
## 功能特性
|
||
|
||
- **定时推送**:每日早上7:30推送早安问候,晚上22:00推送晚安问候
|
||
- **天气信息**:实时获取并推送当地天气情况
|
||
- **纪念日提醒**:自动计算恋爱纪念日、结婚纪念日及生日倒计时
|
||
- **节日祝福**:支持农历节日和节气提醒
|
||
- **个性化内容**:彩虹话、每日一言、贴心小提示等
|
||
- **响应式架构**:使用 WebFlux 和 WebClient 实现高性能异步处理
|
||
- **配置灵活**:支持外部配置和环境变量
|
||
|
||
## 技术栈
|
||
|
||
- **后端框架**:Spring Boot 4.x
|
||
- **响应式编程**:Spring WebFlux + WebClient
|
||
- **JSON处理**:Jackson 3
|
||
- **工具库**:Hutool
|
||
- **构建工具**:Maven
|
||
- **JDK版本**:JDK 25
|
||
- **原生镜像**:GraalVM Native Image
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- JDK 25+
|
||
- Maven 3.6+
|
||
- 微信公众平台账号
|
||
- 天行数据API密钥
|
||
|
||
### 配置说明
|
||
|
||
在 `application.yml` 中配置以下参数:
|
||
|
||
```yaml
|
||
# 微信相关配置
|
||
wechat:
|
||
app-id: "your-app-id" # 微信公众号AppID
|
||
app-secret: "your-app-secret" # 微信公众号AppSecret
|
||
open-id: "user-open-id" # 接收推送的用户OpenID
|
||
template-id-morning: "template-id-for-morning" # 早安模板消息ID
|
||
template-id-night: "template-id-for-night" # 晚安模板消息ID
|
||
|
||
# 天行数据API配置
|
||
daily-love:
|
||
data:
|
||
tianxin-key: "your-tianxin-api-key" # 天行数据API密钥
|
||
city-id: "101270106" # 城市ID
|
||
girl-birthday: "1995-06-28" # 女方生日
|
||
boy-birthday: "1995-03-30" # 男方生日
|
||
cat-birthday: "2022-10-23" # 宠物生日
|
||
love-day: "2022-07-16" # 恋爱纪念日
|
||
wedding-day: "2025-10-08" # 结婚纪念日
|
||
```
|
||
|
||
### 启动应用
|
||
|
||
```bash
|
||
# 编译项目
|
||
mvn clean package
|
||
|
||
# 运行应用
|
||
java -jar target/dailylove.jar
|
||
|
||
# 或使用Maven运行
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── main/
|
||
│ ├── java/com/bamanker/dailylove/
|
||
│ │ ├── config/ # 配置类
|
||
│ │ ├── controller/ # 控制器
|
||
│ │ ├── domain/ # 数据模型
|
||
│ │ ├── service/ # 业务服务
|
||
│ │ ├── utils/ # 工具类
|
||
│ │ └── DailyLoveApplication.java
|
||
│ └── resources/
|
||
│ └── application.yml # 应用配置
|
||
└── test/
|
||
```
|
||
|
||
## 核心功能模块
|
||
|
||
### 1. 推送控制器
|
||
|
||
- [PushDailyController](file:///D:/myWork/dailyLove/src/main/java/com/bamanker/dailylove/controller/PushDailyController.java):处理早安/晚安推送逻辑
|
||
- 支持 `/pushMorning` 和 `/pushNight` 接口手动触发推送
|
||
|
||
### 2. 定时任务
|
||
|
||
- [PushTask](file:///D:/myWork/dailyLove/src/main/java/com/bamanker/dailylove/config/PushTask.java):配置定时推送任务
|
||
- Cron表达式:`0 30 7 * * ?` (早上7:30) 和 `0 0 22 * * ?` (晚上22:00)
|
||
|
||
### 3. 外部服务调用
|
||
|
||
- 使用 WebClient 调用微信API获取访问令牌
|
||
- 调用天行数据API获取天气、彩虹话、每日一言等信息
|
||
|
||
## 配置项说明
|
||
|
||
|
||
| 配置项 | 描述 | 示例 |
|
||
| --------------------------- | -------------------- | ----------- |
|
||
| wechat.app-id | 微信公众号AppID | wx123456789 |
|
||
| wechat.app-secret | 微信公众号AppSecret | abc123... |
|
||
| wechat.open-id | 接收消息的用户OpenID | oABC123... |
|
||
| daily-love.data.tianxin-key | 天行数据API密钥 | 123abc... |
|
||
| daily-love.data.city-id | 城市ID | 101270106 |
|
||
|
||
## 自定义推送内容
|
||
|
||
系统会根据以下情况进行智能提醒:
|
||
|
||
- **恋爱纪念日**:显示恋爱天数及特殊纪念日提醒
|
||
- **生日提醒**:推送生日倒计时
|
||
- **节日祝福**:农历节日、节气等
|
||
- **天气预报**:当日/次日天气情况
|
||
- **个性化内容**:彩虹话、每日一言等
|
||
|
||
## 部署方式
|
||
|
||
### Docker部署
|
||
|
||
```bash
|
||
# 构建Docker镜像
|
||
docker build -t dailylove .
|
||
|
||
# 运行容器
|
||
docker run -d -p 13145:13145 --name dailylove dailylove
|
||
```
|
||
|
||
### 原生镜像部署
|
||
|
||
项目支持GraalVM原生镜像构建,启动速度更快:
|
||
|
||
```bash
|
||
# 构建原生镜像
|
||
./mvnw native:compile -Pnative
|
||
|
||
# 运行原生镜像
|
||
./target/dailylove
|
||
```
|
||
|
||
## 更新日志
|
||
|
||
### **v3.1.1-native**
|
||
|
||
- 优化了响应式编程实现,避免阻塞操作
|
||
· 移除了 PushDailyController 中的 .block() 阻塞操作
|
||
· 重构了异步数据处理逻辑,使用 Mono.zip 并发获取多个数据源
|
||
· 改善了错误处理机制
|
||
|
||
- 重构了配置管理,使用@ConfigurationProperties替代静态字段
|
||
· 创建了 DailyLoveProperties 类使用 @ConfigurationProperties 注解
|
||
· 更新了配置文件结构,使用更清晰的层次结构
|
||
· 添加了环境变量支持,提高了配置的灵活性
|
||
- 修复了定时任务失效问题
|
||
· 启用了 PushTask 定时任务类,使用 @Component 注解
|
||
· 添加了日志记录以便跟踪任务执行
|
||
- 改进了错误处理,增加全局异常处理器
|
||
· 创建了专门的 PushException 异常类
|
||
· 更新了全局异常处理器 GlobalExceptionHandler
|
||
· 在关键位置添加了错误映射和处理
|
||
- 增强了配置文件,支持环境变量
|
||
· 更新了 application.yml 文件,采用新的配置结构
|
||
· 添加了日志级别配置
|
||
· 为配置项提供了默认值和环境变量支持
|
||
|
||
### **v2.4.0-native**
|
||
|
||
- 升级到Spring Boot 4
|
||
- 使用WebClient替代OpenFeign
|
||
- 支持原生镜像构建
|
||
|
||
## 贡献指南
|
||
|
||
1. Fork 本仓库
|
||
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 开启 Pull Request
|
||
|
||
## 许可证
|
||
|
||
此项目采用 MIT 许可证。
|