SpringBoot知识体系实战-定时器篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot知识体系实战-定时器篇相关的知识,希望对你有一定的参考价值。
实战前言:定时任务我想诸位童鞋都不陌生,简而言之名为“设定定时闹钟做某件事情”,在这里我将以订单模块作为实战为例!
需求分析:在企业级应用中,经常打交道的业务应当属于订单模块了,下面将基于这样的场景实战定时器:将业务级别的订单表A中发生更新的数据 每天定时 同步到报表级别的订单表B中(为了给数据分析部门做报表)!其定时执行的业务流程如下图所示:
实现思路:
①、核心逻辑其实你会发现在于“拉取A表的数据以及更新到报表级别的订单表B中”;
②、实现①流程之后,接下来其实是定时器的责任了。在这里我采用的是Spring提供的Scheduler模块来实现!
③、在这里需要解释“发生更新”的概念,假设每天拉取数据的日期定义为reportDate,那么更新的数据应当包括:“create_time=reportDate的数据列表”以及“update_time=reportDate的数据列表”,即“当天新产生的数据以及当天发生更新的数据”统称为“发生更新的数据”,即增量拉取;
在实战过程中,我也实现了全量拉取的业务逻辑。而对于报表级别的订单表B,则是通过order_no,即订单编号来判断记录是否唯一从而决定触发B表的数据记录是需要修改还是新增
正文:当得到上面的实现思路时,其实已经几乎实现了一大半,接下来就是代码实现了
①、首先创建数据库db_springboot,创建两张数据字段一样的表,分别为业务级别的数据表A:order_record,报表级别的数据表B:order_report。并用mybatis逆向工程生成entity,mapper,mapper.xml文件(在这里就不贴出来了!),下面贴出A,B表的创建语句:
②、然后在业务级别的订单模块OrderRecordMapper中定义全量/增量拉取的sql逻辑:
③、在报表级别的订单模块OrderReportMapper中定义新增或者修改的sql逻辑,即通过订单编号查询的sql逻辑
④、采用Spring的Scheduler组件模块实现定时逻辑,在使用之前,需要在SpringBoot启动类开启Scheduler,如下所示:
⑤、而真正的定时代码逻辑如下:
效果:在这里,@Scheduled是核心重点,而其中的cron参数其实就是:“秒 分 时 日 月 年”的设置,在这里我是动态配置配置文件中,配置如下图所示:
系统一启动,将会在定时设置的cron的那个点开始触发,首先是源数据表,接着是从源数据表中“拉取今天新增的以及新增更新的数据列表” 并新增或者更新到 目标报表表B中,数据表中的数据以及触发的效果如下图所示:
结语:以上涉及到的源码以及数据库下载地址:http://down.51cto.com/data/2449867 实战过程如有相关问题,请多多指教!若文章能帮助到你,请点赞转发分享呗,顺便关注关注我的微信公众号或者加我个人qq:1974544863 或者 qq群:583522159(java开源技术交流)进行技术交流
以上是关于SpringBoot知识体系实战-定时器篇的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot知识体系+Vue3 实战WIKI知识库系统笔记 demo3_CommonResp
SpringBoot知识体系+Vue3 实战WIKI知识库系统笔记 demo3_CommonResp
SpringBoot知识体系+Vue3 实战WIKI知识库系统笔记 demo4_mybatis_Example
SpringBoot知识体系+Vue3 实战WIKI知识库系统笔记 demo4_mybatis_Example