温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot知识体系实战-定时器篇

发布时间:2020-07-31 23:31:40 来源:网络 阅读:2362 作者:steadyjack 栏目:开发技术

实战前言:定时任务我想诸位童鞋都不陌生,简而言之名为“设定定时闹钟做某件事情”,在这里我将以订单模块作为实战为例!

需求分析:在企业级应用中,经常打交道的业务应当属于订单模块了,下面将基于这样的场景实战定时器:将业务级别的订单表A中发生更新的数据 每天定时 同步到报表级别的订单表B中(为了给数据分析部门做报表)!其定时执行的业务流程如下图所示:
SpringBoot知识体系实战-定时器篇

实现思路:
①、核心逻辑其实你会发现在于“拉取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表的创建语句:
SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

②、然后在业务级别的订单模块OrderRecordMapper中定义全量/增量拉取的sql逻辑:

SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

③、在报表级别的订单模块OrderReportMapper中定义新增或者修改的sql逻辑,即通过订单编号查询的sql逻辑

SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

④、采用Spring的Scheduler组件模块实现定时逻辑,在使用之前,需要在SpringBoot启动类开启Scheduler,如下所示:
SpringBoot知识体系实战-定时器篇

⑤、而真正的定时代码逻辑如下:

SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

效果:在这里,@Scheduled是核心重点,而其中的cron参数其实就是:“秒 分 时 日 月 年”的设置,在这里我是动态配置配置文件中,配置如下图所示:
SpringBoot知识体系实战-定时器篇

系统一启动,将会在定时设置的cron的那个点开始触发,首先是源数据表,接着是从源数据表中“拉取今天新增的以及新增更新的数据列表” 并新增或者更新到 目标报表表B中,数据表中的数据以及触发的效果如下图所示:
SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

SpringBoot知识体系实战-定时器篇

结语:以上涉及到的源码以及数据库下载地址:http://down.51cto.com/data/2449867 实战过程如有相关问题,请多多指教!若文章能帮助到你,请点赞转发分享呗,顺便关注关注我的微信公众号或者加我个人qq:1974544863 或者 qq群:583522159(java开源技术交流)进行技术交流
SpringBoot知识体系实战-定时器篇

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI