重构了部分代码

This commit is contained in:
bamanker
2026-01-14 00:06:59 +08:00
parent 1c133b59f6
commit acdf092de3
22 changed files with 743 additions and 533 deletions

201
README.md
View File

@@ -1,27 +1,194 @@
# 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 |
1. xxxx
2. xxxx
3. xxxx
## 自定义推送内容
#### 使用说明
系统会根据以下情况进行智能提醒:
1. xxxx
2. xxxx
3. xxxx
- **恋爱纪念日**:显示恋爱天数及特殊纪念日提醒
- **生日提醒**:推送生日倒计时
- **节日祝福**:农历节日、节气等
- **天气预报**:当日/次日天气情况
- **个性化内容**:彩虹话、每日一言等
#### 参与贡献
## 部署方式
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
### 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 许可证。