开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
今天我们来学习一下定时任务处理,学习如何自动计算图书的评分和评论人数
1.查看定时任务依赖架包
2.applicationContext.xml开启注解模式
2.1 确认是否引用xmlns:task
2.2开启注解模式
<!-- 开启Spring Task任务注解模式-->
<task:annotation-driven></task:annotation-driven>
3.在bookMapper.xml定义更新语句
<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定义方法
5.BookService定义接口
6.BookServiceImpl实现更新方法
7.新增task包并且新建ComputeTask类文件
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表达式:
一共是七位,默认把最右边的字段年省略
- 0,30:表示0秒或者30秒
- 0-5:表示前五分钟
- ?表示任意
- * 表示每秒,每分,每天等等
- WED:表示每周三
- *和?是互斥的
8.重启项目
观察控制台输出:每隔1分钟,会执行一次更新语句
9.总结:
通过今天的学习,我们了解了如何通过SpringBoot的任务调度,自动执行我们要执行的业务流程,知道了controller->service,service->mapper严格执行规范