Spring Batch is a framework for batch processing in Java. It allows developers to process large volumes of records by dividing the work into small chunks called steps. The framework includes components like job launcher, job repository, step, item reader, item processor and item writer to process a batch job. Jobs are composed of steps, and steps use readers, processors and writers to read, process and write data.
39. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
39
39
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
40. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
40
40
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
41. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
41
41
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
+PC3FQPTJUPSZ༻ͷτϥϯβΫ
γϣϯϚωʔδϟ͕ΞϓϦέʔ
γϣϯͰ͞༻ޡΕΔͷΛ͙ɻ
42. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
42
42
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
+PC3FQPTJUPSZ͕͏+%#$
σʔλιʔετϥϯβΫγϣ
ϯϚωʔδϟΛΧελϜՄೳ
43. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
43
43
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
44. +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
44
44
w +PC#VJMEFS'BDUPSZɺ4UFQ#VJMEFS'BDUPSZ͕ඇਪԽ͞Εͨ
w ֤'BDUPSZ#FBOࣗಈతʹ࡞͞Εͳ͘ͳͬͨ
@Bea
n
public Job demoJob(JobRepository jobRepository, Step step)
{
return new JobBuilder(demoJob, jobRepository
)
.start(step
)
.build()
;
}
@Bea
n
public Job demoJob(Step step)
{
return jobBuilderFactory.get(“demoJob
)
.start(step
)
.build()
;
}
7
7
+PCͷ#FBO࡞ํ๏
˞+PC3FQPTJUPSZ͕෦Ͱੜ͞Ε͍ͯΔ͜ͱ͕͔ΓͮΒ͘ϛεϦʔυ͢ΔͨΊվળ͞Εͨɻ
˞ඇਪͰ͋Δ͕ɺࣗલͰຊ'BDUPSZΛ#FBOԽ͢Ε4QSJOH#BUDIͰར༻ܧଓՄೳ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDIJTTVFT
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDIXJLJ4QSJOH#BUDI.JHSBUJPO(VJEFKPCCVJMEFSGBDUPSZBOETUFQCVJMEFSGBDUPSZCFBOFYQPTVSFDPO
fi
HVSBUJPO
45. +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
45
45
@Bea
n
public Step demo01Step(JobRepository jobRepository
,
PlatformTransactionManager tm, Tasklet tasklet)
{
return new StepBuilder(demoTasklet, jobRepository
)
.tasklet(tasklet, tm
)
.build()
;
}
@Bea
n
public Step demo01Step(Tasklet tasklet)
{
return stepBuilderFactory.get(“demoTasklet
)
.tasklet(tasklet
)
.build()
;
}
7
7
4UFQͷ#FBO࡞ํ๏
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDIXJLJ4QSJOH#BUDI.JHSBUJPO(VJEFUSBOTBDUJPONBOBHFSCFBOFYQPTVSFDPO
fi
HVSBUJPO
˞+PC3FQPTJUPSZ༻ͷτϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։Խ͞ΕͨͨΊɺ
ɹ4UFQͰ༻͢ΔτϥϯβΫγϣϯϚωʔδϟΛ໌ࣔతʹࢦఆ͢Δඞཁ͋Γ
46. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
46
46
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
48. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
48
48
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
͋·ΓΘΕͳ͔ͬͨͨΊ
ʢʴ+BLBSUBҠ২ʁʣ
49. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
49
49
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
50. ςʔϒϧ 7ˠ7ͷมߋ
#5$)@+0#@9$65*0/ ҎԼΧϥϜͷআʢ+43আʣ
w +0#@$0/'*(635*0/@-0$5*0/
#5$)@+0#@9$65*0/@13.4 ҎԼΧϥϜͷআ
w 5:1@$%
w
,:@/.
w 453*/(@7-
w %5@7-
w
-0/(@7-
w %06#-@7-
ҎԼΧϥϜͷՃ
w 13.53@/.
w 13.53@5:1
w 13.53@7-6
ʢδϣϒύϥϝʔλͷܕվળʣ
%#εΩʔϚͷมߋ
50
w +PC3FQPTJUPSZ͕ར༻͢Δ%#ςʔϒϧͷߏ͕มߋ͞Εͨ
w 4QSJOH#BUDI͔ΒΞοϓσʔτ͢Δ߹ɺςʔϒϧͷϚΠά
Ϩʔγϣϯ͕ඞཁ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDIXJLJ4QSJOH#BUDI.JHSBUJPO(VJEFEBUBCBTFTDIFNBVQEBUFT
֤%#͚ͷϚΠάϨʔγϣϯ༻%%-ɺTQSJOHCBUDIDPSFKBSͷҎԼʹஔ͞Ε͍ͯΔɻ
PSHTQSJOHGSBNFXPSLCBUDIDPSFNJHSBUJPO
51. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
51
51
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
*UFN3FBEFSͰSFDPSETΛੜ
52. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
52
52
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
54. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
54
54
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
56. 4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
56
56
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑՃ
w +PC4UFQͷ#FBO࡞ํ๏ͷมߋ
w δϣϒύϥϝʔλͷܕɺࢦఆࣜܗͷมߋ
w +43 K#BUDI ࣮ͷআ
w %#εΩʔϚͷมߋ
w +BWBSFDPSET +BWB ͷରԠ
w 4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
w %FGBVMU#BUDI$PO
fi
HVSBUJPO
w 4QSJOH#PPUͷෳ+PC࣮ߦػೳͷഇࢭ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMXIBUT/FX
63. (SBBM7.ωΠςΟϒαϙʔτɿىಈ࣌ؒͷূݕ
63
63
4UFQɿ+7.Ͱ࣮ߦ͠ىಈ࣌ؒΛ֬ೝ
$ mvn package
...
$ java -jar target/demo-batch-native-0.0.1-SNAPSHOT.jar
...
Started DemoBatchNativeApplication in 2.706 seconds (process
running for 3.398)
...
Step: [demoTasklet] executed in 17ms
...
Job: [SimpleJob: [name=demoJob]] completed with the following
parameters: [{}] and the following status: [COMPLETED] in 43ms
...
65. (SBBM7.ωΠςΟϒαϙʔτɿىಈ࣌ؒͷূݕ
65
65
4UFQɿωΠςΟϒ࣮ߦ͠ىಈ࣌ؒΛ֬ೝ
$ docker run --rm -p 8080:8080 docker.io/library/demo-batch-
native:0.0.1-SNAPSHOT
...
Started DemoBatchNativeApplication in 0.046 seconds (process
running for 0.069)
...
Step: [demoTasklet] executed in 1ms
...
Job: [SimpleJob: [name=demoJob]] completed with the following
parameters: [{}] and the following status: [COMPLETED] in 3ms
...