实战前言:定时任务我想诸位童鞋都不陌生,简而言之名为“设定定时闹钟做某件事情”,在这里我将以订单模块作为实战为例!
成都创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元花垣做网站,已为上家服务,为花垣各地企业和个人服务,联系电话:18982081108需求分析:在企业级应用中,经常打交道的业务应当属于订单模块了,下面将基于这样的场景实战定时器:将业务级别的订单表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开源技术交流)进行技术交流
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。