随着机构码用码量越来越多目前为止有4百万,统计异常接口响应时间会变慢,而且统计异常只统计48小时内,count效率实在太低。
最后考虑使用采集的方式,将异常数据采集到另一张异常表,这样子的话count效率会高些。不仅要采集异常表,还要根据月份汇总归档表也就是分表的概念,这样也能减轻单表的压力。
目前,Spring Batch是批处理框架为数不多的优秀框架,是一个轻量级、完善的批处理框架。提供了大量可重用的组件,包括了日志、追踪、事务、任务统计、任务重启、跳过、重复、资源管理。
Spring Batch是一个批处理应用框架,不是调度框架,需要调度框架来构建完成批处理任务。项目中使用定时器来调度。
JobLauncher :任务启动器,程序的入口
Job:一个具体的任务
Step:一个具体的执行步骤,一个Job有多个Step
JobRepository:存储数据的仓库,在任务执行的时候,需要它来记录任务状态信息,可以看做是一个数据库的接口
读取数据库的定时任务表,通过反射,执行相应定时任务
进入SringBatch部分
JobLauncher.run(XXXJob1,JobParameters) 开始启动任务了
XXX1Job任务有3个Step(1.建立表+月份 2.读取原表写入到 表+月份 3.删除原表已归档数据)
XXX2Job任务有3个Step(1.获取采集48小时时间 2.读取原表异常数据 写入异常表)
tasklet更适合一个步骤到另一个步骤场景,chunk实现处理分页读,或我们不想再内存中保留大量数据场景,项目中用于创建分表和获取时间放入上下文的操作用tasklet,像比如读取表1000条写入表这种利用chunk