0 评论

0 收藏

分享

【SpringBatch中文社区】SpringBatch是什么呢?又有哪些作用呢?

现在有很多项目都有批量处理需求,比如:
. A, f/ a' y( C6 E5 y, C(1)自动,复杂地处理海量信息,无需用户参与即可有效地进行处理' V6 a; |3 N# r3 Q" b
(2)定期操作非常大的数据集重复处理复杂的业务规则# V8 m/ |# H/ `; ?) z+ H& s
(3)从内部和外部系统接收信息的集成,需要格式化,验证和以事务方式进行处理,并落到系统中3 I8 i8 A% i3 R
遇到以上类似场景,就可以考虑使用SpringBatch框架了# `3 y' i/ |9 q# K% j* o. q3 T

$ P9 t7 M. O3 u' a+ a; D一、Spring Batch到底是什么
; G! }* B8 ?. }8 I  H- bSpring Batch是一个轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序,是Spring提供的一个数据操作处理框架,其处理过程如下图5 F" @6 @! j' Q5 P) y
1.png . f3 `( P2 m8 V

, Y. ?0 h* Q# M: c/ l- T7 W/ ]二、应用场景(SpringBatch作用
) e0 w- d/ o2 ?* r1、从数据库,文件或队列中等多数据源读取海量记录
. A2 H& X+ X3 J* {2、以某种方式处理数据
& [4 y) M# U7 n3、以修改后的形式回写数据到指定数据源0 W2 R, @9 N: T. X  T& R+ e' o) ~

+ z8 J4 v7 ?8 b3 s三、Spring Batch架构组成* a3 w' K% i3 B% D/ O3 G
Spring Batch有三个重要组成部分:应用层、核心层、基础架构层$ E  z' k' H4 d' h4 i
1.jpeg ( m7 Z- w1 J3 j9 D

2 U8 G7 m4 P; G7 e* c1、Application) i5 f: t$ z' M1 f/ m7 D8 g4 `$ Q/ f
应用层包含所有的批处理作业,通过Spring框架管理自定义的代码。
! K4 ^) J5 h/ v- I
! r& w* W( y/ M* x0 _2、Batch Core
+ g0 m1 G+ n) Y- x0 {核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。
3 ]* ?! ^# Y! c9 Y0 c& U* y
# @  a0 z+ l* p; I8 F3、Batch Infrastructure
3 y) ^1 v0 C4 n, ?, y$ X基础构架层提供公共的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块)
, W' m- O) s% F9 z应用层和核心层建立在基础构架层之上, `4 t( z  f+ a! a3 |7 T0 {8 Y0 ]
5 `5 A8 W  l2 p, h$ T
四、作业的配置和运行) P) f' R5 `4 r' c7 r
总体体系结构
2 y. |! Q: f. {  L# J 2.jpeg
! |7 m5 `( I% V  ]4 [
2 {2 b( ?9 g( @- c3 H1、JobLauncher  s$ H; U( u1 L: E1 ^
启动任务,作业将在JobLauncher相同的线程中执行& _  B  ^& A: [; d
当作业运行时,会创建一个JobInstance,JobInstance代表作业的一次运行逻辑,可通过作业名称和传递给作业的识别性参数来标识。
8 }& e. O7 x4 I  T* w; @/ w5 IJobExecution是真正地运行作业,每次运行JobInstance,都会创建新的JobExecution
5 U, C) Q+ X& B4 e. b; S6 [ 3.jpeg   Y% k6 a% H1 ^$ {' u
$ ]- H" y1 k  _! A9 k4 f; S8 r+ U
JobInstance只有一次能成功执行,因为JobInstance通过作业名称和传入的识别性参数来标识。
7 _8 t$ s/ o0 E/ j- m( W' {# s1 l8 }5 f! [  }
2、Job
. H4 s  Q$ F4 ^! m' W+ X. G  ]  p# k一个具体的任务,一个Job中可有多个Step
8 T  L' ]- j+ L
! I, n" Z0 y$ @+ D3、Step
7 X. I7 ?7 t- x( {一个具体执行步骤,其包括ItemReader、ItemProcessor、ItemWriter
; t7 X% o0 P' y9 s$ X* pItemReader用来读取数据,ItemProcessor用来处理数据,ItemWriter用来写数据5 c2 I, ?9 f! m9 \# ?
5.png ( J5 o0 c- l6 x% K% W

9 A* m1 C; `, F% n4、JobRepository$ x" J7 ]' h9 @) K( z
记录任务运行状态信息3 a, z, P( r- }2 V( O, @; p
Spring Batch会默认在数据库里面创建一些batch相关的表,来记录所有job/step运行的状态和结果  \+ o9 g3 a( ?$ M6 D: q
涉及表:
2 z) d: d3 ~$ B2 E# ~2 J. _batch_job_execution
& d: A% a6 m- Y- ubatch_job_execution_context
7 p2 \# d; F' ]! O6 ?  Z; S5 Abatch_job_execution_params  v9 u$ Z$ q$ K8 r
batch_job_execution_seq
6 I$ }9 g* I" t, f" ?1 r" r8 ~batch_job_instance
) m0 x2 i% \9 Q4 b+ x  _batch_job_seq
9 c1 S% b4 G: d: ]1 ]! Ubatch_step_execution
/ a( u+ @- O) R( W- e+ |" @9 Dbatch_step_execution_context7 V7 Q2 h  n9 t
batch_step_execution_seq( e- H- t# f1 l# x

$ X. A5 }7 `+ v3 c以上,就是对Spring Batch的一个整体认识,希望SpringBatch中文社区能在SpringBatch学习的道路上帮助。
: k+ ^+ u% ?  J6 W" P% S' Z) y$ h& H# W/ |! z
, @/ Q3 Z+ d$ r2 Y5 d/ T) s
回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
主题 24
回复 1
粉丝 0
快速回复 返回顶部 返回列表