# 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 许可证。