369285004a09e5d5f0ec500ea37bb527d4cfa813
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 中配置以下参数:
# 微信相关配置
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" # 结婚纪念日
启动应用
# 编译项目
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:处理早安/晚安推送逻辑
- 支持
/pushMorning和/pushNight接口手动触发推送
2. 定时任务
- PushTask:配置定时推送任务
- 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部署
# 构建Docker镜像
docker build -t dailylove .
# 运行容器
docker run -d -p 13145:13145 --name dailylove dailylove
原生镜像部署
项目支持GraalVM原生镜像构建,启动速度更快:
# 构建原生镜像
./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
- 支持原生镜像构建
贡献指南
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
许可证
此项目采用 MIT 许可证。
Description
Releases
1
v3.0.4-native
Latest
Languages
Java
99.6%
Dockerfile
0.4%