SpringBoot @EnableScheduling定时任务+PV统计

1.在启动类的头部必须加上@EnableScheduling注解,表示开启了定时任务功能。

在这里插入图片描述

2.具体实现PV统计更新的代码:

其实这里所谓的更新,无非是重新生成一遍数据对象,再将这个数据对象更新到数据库里。

cron表达式:0/20表示:从0秒开始,每隔20秒重新统计一次。
corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份

注意:需要有两个类,一个实体类,一个实体详情类(里面包含访问该实体年,月,日,时,分,秒等等信息)
步骤
1、找资源->res
2、重新生成数据对象(把资源封装成新的资源详情的数据对象)
3、找资源详情->resPv
4、资源详情为空,则添加新数据对象;资源详情不为空,则更新数据对象。

eg.拿某工程的其中一个方法举例:

 /**
     * 按资源统计
     */
    @Scheduled(cron = "0/20 * * * * *")
    public void statRes() {

        Calendar cal = Calendar.getInstance();
        short year = (short) cal.get(Calendar.YEAR);
        short month = (short) (cal.get(Calendar.MONTH) + 1);//按老外的逻辑,从零月开始



        List<Res> resList = this.resService.query();//找资源


        for (Res res : resList) {

            int num = (int) this.sitePvService.count(res.getSysId(), year, month, res.getChannelId(),res.getId());
			//重新生成数据对象(把资源封装成新的资源详情的数据对象)
            StatResPv statResPv = new StatResPv();
            statResPv.setNum(num);
            statResPv.setSysId(res.getSysId());

            statResPv.setYear(year);
            statResPv.setMonth(month);
            statResPv.setChannelId(res.getChannelId());
            statResPv.setResId(res.getId());


            StatResPv existStatResPv = this.statResPvService.load(res.getSysId(), year, month, res.getChannelId(), res.getId());//找资源详情

            if (null == existStatResPv) {

                this.statResPvService.insert(statResPv);//为空,则添加
            } else {
                statResPv.setId(existStatResPv.getId());
                this.statResPvService.update(statResPv);//不为空,则更新
            }
        }
    }

注意:

实时更新PV需要启动类、需要Controller,工程一启动就更新,而定时更新PV统计只需要一个普通的类(加的是@component注解)(在持久层、业务层和控制层中,分别采用@Repository、@Service和@Controller对分层中的类进行凝视,而用@Component对那些比较中立的类进行凝视)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值