• 【实战系列】数据报表统计并定时推送用户的手把手教程


    本文节选自《实战演练专题》

    通过一个小的业务点出发,搭建一个可以实例使用的项目工程,将各种知识点串联起来; 实战演练专题中,每一个项目都是可以独立运行的,包含若干知识点,甚至可以不做修改直接应用于生产项目;

    今天的实战项目主要解决的业务需求为: 每日新增用户统计,生成报表,并邮件发送给相关人

    本项目将包含以下知识点:

    • 基于MySql的每日新增用户报表统计(如何统计每日新增用户,若日期不连续如何自动补0?)
    • 定时执行报表统计任务
    • MyBatis + MySql数据操作
    • 邮件发送
    • Thymeleaf引擎实现报表模板渲染

    I. 需求拆解

    需要相对来说属于比较明确的了,目的就是实现一个自动报表统计的任务,查询出每日的用户新增情况,然后推送给指定的用户

    因此我们将很清晰的知道,我们需要干的事情

    定时任务

    这里重点放在如何来支持这个任务的定时执行,通常来说定时任务会区分为固定时刻执行 + 间隔时长执行两种(注意这种区分主要是为了方便理解,如每天五点执行的任务,也可以理解为每隔24h执行一次)

    前者常见于 一次性任务 ,如本文中的每天统计一次,这种就是相对典型的固定时刻执行的任务;

    后者常见于 轮询式任务 ,如常见的应用探活(每隔30s发一个ping消息,判断服务是否健在)

    定时任务的方案非常多,有兴趣的小伙伴可以关注一波“一灰灰blog”公众号,蹲守一个后续

    本文将直接采用Spring的定时任务实现需求场景,对这块不熟悉的小伙伴可以看一下我之前的分享的博文

    每日新增用户统计

    每日新增用户统计,实现方式挺多的,比如举几个简单的实现思路

    • 基于redis的计数器:一天一个key,当天有新用户时,同步的实现计数器+1
    • 基于数据库,新增一个统计表,包含如日期 + 新增用户数 + 活跃用户数 等字段
      • 有新用户注册时,对应日期的新增用户数,活跃用户数 + 1
      • 老用户今日首次使用时,活跃用户数 + 1

    上面两个方案都需要借助额外的库表来辅助支持,本文则采用直接统计用户表,根据注册时间来聚合统计每日的新增用户数

    • 优点:简单,无额外要求,适用于数据量小的场景(比如用户量小于百万的)
    • 缺点:用户量大时,数据库压力大

    关于如何使用mysql进行统计每日新增用户,不熟悉的小伙伴,推荐参考博主之前的分享文章

    报表生成&推送用户

    接下来就是将上面统计的数据,生成报表然后推送给用户;首先是如何将数据生成报表?其次则是如何推送给指定用户?

    将数据组装成报表的方式通常取决于你选择的推送方式,如飞书、钉钉之类的,有对应的开发api,可以直接推送富文本;

    本文的实现姿势则选择的是通过邮件的方式进行发送,why?

    • 飞书、钉钉、微信之类的,需要授权,对于不使用这些作为办公软件的小伙伴没什么意义
    • 短信需要钱….

    对于邮件,大家应该都有,无论是qq邮箱,还是工作邮箱;基本上对于想要直接跑本文的小伙伴来说,没有什么额外的门槛

    关于java/spring如何使用邮箱,对此不太熟悉的小伙伴,可以参考博主之前的分享文章

    上面文章中介绍的是FreeMaker来实现模板渲染,本文则介绍另外一个知识点,借助Thymleaf来实现数据报表的生成 (一篇文章获取这么多知识点,就问你开不开心O(∩_∩)O)

    II. 分布实现

    1. 项目搭建

    首选搭建一个基本的SpringBoot应用,相信这一步大家都很熟悉了;若有不懂的小伙伴,请点赞、评论加博主好友,手把手教你,不收费

    最终的项目依赖如下

    
      
      
        org.springframework.boot
        spring-boot-starter-mail
      
    
      
        org.springframework.boot
        spring-boot-starter-web
      
    
      
        org.springframework.boot
        spring-boot-starter-thymeleaf
      
    
    
      
        com.google.guava
        guava
        31.1-jre
      
    
      
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.2.2
      
      
      
  • 相关阅读:
    SMT贴片制造:发挥的作用和价值]
    解锁黑科技!群晖管家+cpolar内网穿透,让你的本地黑群晖实现公网远程访问!
    如何使用Python查找和移动重复文件
    SpringCloud - 项目组织架构如何搭建
    【牛客刷题--SQL篇】多表查询链接查询 SQL22统计每个学校的答过题的用户的平均答题数
    【漏洞复现-twonkyserver-目录遍历】vulfocus/twonkyserver-cve_2018_7171
    毕业设计之基于node.js+Vue+Element驾校信息管理系统
    Handler 原理
    配置.ssh功能
    C语言从入门到进阶教程文章分享汇总~持续更新
  • 原文地址:https://blog.csdn.net/JHIII/article/details/126438845