社交项目(十七)

67 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

今天我们来学习一下定时任务处理,学习如何自动计算图书的评分和评论人数

1.查看定时任务依赖架包

image.png

2.applicationContext.xml开启注解模式

2.1 确认是否引用xmlns:task

image.png

2.2开启注解模式

<!--    开启Spring Task任务注解模式-->
<task:annotation-driven></task:annotation-driven>

image.png

3.在bookMapper.xml定义更新语句

image.png

<update id="updateEvaluation">
        UPDATE book b SET
            evaluation_score=(
            SELECT IFNULL(AVG(score),0) from evaluation where book_id  = b.book_id),
            evaluation_quantity=(
            select count(*) from evaluation where book_id =b.book_id)

</update>

sql语句说明:

  • IFNULL(AVG(score),0):判断查询的分数是否为空,如果为空则设置成0

4.BookMapper定义方法

image.png

5.BookService定义接口

image.png

6.BookServiceImpl实现更新方法

image.png

7.新增task包并且新建ComputeTask类文件

image.png

import javax.annotation.Resource;

@Component
public class ComputeTask {
    @Resource
    private BookService bookService;
    @Scheduled(cron = "0 * * * * ?")
    public void updateEvaluation(){
        bookService.updateEvaluation();
    }
}

代码说明:

  • @Component:当一个控制器无法定义时候,我们可以定义为组件
  • @Scheduled(cron = "0 * * * * ?"):任务调度,每分钟0秒的时候执行 学习一下cron表达式: image.png 一共是七位,默认把最右边的字段年省略
  • 0,30:表示0秒或者30秒
  • 0-5:表示前五分钟
  • ?表示任意
  • * 表示每秒,每分,每天等等
  • WED:表示每周三
  • *和?是互斥的

8.重启项目

观察控制台输出:每隔1分钟,会执行一次更新语句 image.png

9.总结:

通过今天的学习,我们了解了如何通过SpringBoot的任务调度,自动执行我们要执行的业务流程,知道了controller->service,service->mapper严格执行规范