某数据日报思路和Java汇总每日每周每月用户数据定时任务+锁

简介: 一、某数据日报思路增加type字段1.日报核对每一个字段,缺少的就增加2.改造每个查询sql为查时间段,后面可以重复利用3。先做月报,新建定时任务,自己百度cron表达式,每月1号凌晨一点执行月报定时任务4.做周报,新建定时任务,每周一凌晨1点执行二、Java汇总每日每周每月用户数据定时任务+锁

一、某数据日报思路

增加type字段

1.日报核对每一个字段,缺少的就增加

2.改造每个查询sql为查时间段,后面可以重复利用

3。先做月报,新建定时任务,自己百度cron表达式,每月1号凌晨一点执行月报定时任务

4.做周报,新建定时任务,每周一凌晨1点执行

二、Java汇总每日每周每月用户数据定时任务+锁

@Configuration
@EnableScheduling
@Log4j2
class UserVisitTimer {
    @Autowired
    private IDailyAnalyzeService dailyAnalyze;
    @Autowired
    private RedisLockRegistry redisLockRegistry;
    private String key = "ANALYZE_DAILY";
    @Scheduled(cron = "0 0 2 * * ?")
    private void dailyData() {
        log.info("处理日报数据 start");
        if (getLock(key)) {
            try {
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                calendar.add(Calendar.DATE, -1);
                String dateStr = format.format(calendar.getTime());
                Integer type = 1;
                DetailsReq detailsReq = new DetailsReq();
                detailsReq.setDate(dateStr);
                detailsReq.setType(type);
                detailsReq.setPlatform("sscm");
                //生成每日详情数据
                dailyAnalyze.dailyDetails(detailsReq);
                //生成每日汇总数据
                dailyAnalyze.dailySummary(dateStr);
                //生成每日sku数据
                dailyAnalyze.dailyGoods(dateStr);
                log.info("dailyData:统计{}的数据汇总完成", dateStr);
                //手动统计首单用户数据
                dailyAnalyze.firstPayAnalyze(dateStr);
                log.info("dailyData:处理{}的首单数据完成");
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e.getMessage());
            }
            releaseLock(key);
        } else {
            log.info("处理日报数据 未获取到锁 end");
        }
    }
    /**
     通俗的说就是多个线程,也可以说多个方法同时对一个资源进行访问时,如果不加锁会造成线程安全问题。
     举例:比如有两张票,但是有5个人进来买,买了一张票数就减1,在他们进门的时候会判断是否还有票,但是在他们进门的那一刻,
     票还一张都没有买走。但是他们都已经进门了,过了是否有票的校验了,所以最后票数为被减成负3,显然是不对的,
     因为票不能小于0,所以需要加一个锁,在同一时刻只能有一个人进门去买票,也就是同一个资源同一个时刻只能有一个线程进行操作,
     这样在第三个人进门的时候就能判断出票数已经卖完了,不会产生票数成负数的情况。
     * @param key
     * @return
     */
    //获取锁
    private boolean getLock(String key) {
        Lock lock = redisLockRegistry.obtain(key);
        if (lock.tryLock()) {
            return true;
        } else {
            return false;
        }
    }
    //释放锁
    private void releaseLock(String key) {
        Lock lock = redisLockRegistry.obtain(key);
        lock.unlock();
    }
}
相关文章
|
9月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
399 4
|
9月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
570 16
|
10月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
10月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
传感器 分布式计算 安全
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与分析技术(171)
本文围绕 Java 大数据在智能安防入侵检测系统中的应用展开,剖析系统现状与挑战,阐释多源数据融合及分析技术,结合案例与代码给出实操方案,提升入侵检测效能。
|
自然语言处理 Java 关系型数据库
Java|小数据量场景的模糊搜索体验优化
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
359 0
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
存储 架构师 安全
深入理解Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁(图解+史上最全)
锁状态bits1bit是否是偏向锁2bit锁标志位无锁状态对象的hashCode001偏向锁线程ID101轻量级锁指向栈中锁记录的指针000重量级锁指向互斥量的指针010尼恩提示,讲完 如减少锁粒度、锁粗化、关闭偏向锁(-XX:-UseBiasedLocking)等优化手段 , 可以得到 120分了。如减少锁粒度、锁粗化、关闭偏向锁(-XX:-UseBiasedLocking)等‌。JVM锁的膨胀、锁的内存结构变化相关的面试题,是非常常见的面试题。也是核心面试题。
深入理解Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁(图解+史上最全)
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
808 9
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
860 4