SlideShare a Scribd company logo
1 of 85
Download to read offline
8IBU`TOFXJO
4QSJOH#BUDI
+46(4QSJOH'FTU
+46(ελοϑɹ஑୩ɹஐߦ
ࣗ‫঺ݾ‬հ
w೔ຊ4QSJOHϢʔβձ +46( ελοϑ
w๭4*FSͰιϑτ΢ΣΞΞʔΩςΫτ
ʢ࣮ଶ͸؅ཧ‫ۀ‬຿ଟΊɾɾɾʣ
w๭ॻͷචऀͷҰਓ
IUUQTXXXTIPFJTIBDPKQCPPLEFUBJM
2
4QSJOH#BUDIͷա‫ڈ‬ͷษ‫ڧ‬ձ
3
https://www.slideshare.net/apkiban/ss-122881217
+46(ษ‫ڧ‬ձˏ
ࠓճɿ4QSJOH#BUDIͷ͓͞Β͍ʴ4QSJOH#BUDIͷ৽‫ػ‬ೳͳͲ
+46(ษ‫ڧ‬ձˏ
https://www.slideshare.net/ikeyat/spring-batch-tips-233698138 https://www.slideshare.net/nttdata-tech/spring-fest-
2020-spring-batch-nttdata
4QSJOH'FTU!
https://www.slideshare.net/HideyukiSASAKURA/batch-spring-batch
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳ
4
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳ
5
όονॲཧͱ͸ʁ
6
Ұൠతʹɺόονॲཧͱ͸ʮ·ͱΊͯҰ‫ॲׅ‬ཧ͢Δʯ͜ͱΛࢦ͢ɻ
IUUQTUFSBTPMVOBCBUDIHJUIVCJPHVJEFMJOFDVSSFOUKBTJOHMF@JOEFYIUNM$I@(FOFSBM#BUDI1SPDFTT
όονॲཧΛ࠾༻͢Δ໨త
wεϧʔϓοτͷ޲্
wʢΦϯϥΠϯॲཧͷʣԠ౴ੑͷ֬อ
w࣌ؒ΍Πϕϯτ΁ͷରԠ
w֎෦γεςϜͱͷ࿈‫্ܞ‬ͷ੍໿
‫ٻ‬ΊΒΕΔཁ݅
wੑೳ޲্
wҟৗൃੜ࣌ͷϦΧόϦ
wଟ༷ͳ‫ى‬ಈํࣜ
w͞·͟·ͳೖग़ྗΠϯλϑΣʔε
όονॲཧͱ͸ʁ
7
Ұൠతʹɺόονॲཧͱ͸ʮ·ͱΊͯҰ‫ॲׅ‬ཧ͢Δʯ͜ͱΛࢦ͢ɻ
IUUQTUFSBTPMVOBCBUDIHJUIVCJPHVJEFMJOFDVSSFOUKBTJOHMF@JOEFYIUNM$I@(FOFSBM#BUDI1SPDFTT
όονॲཧΛ࠾༻͢Δ໨త
wεϧʔϓοτͷ޲্
wʢΦϯϥΠϯॲཧͷʣԠ౴ੑͷ֬อ
w࣌ؒ΍Πϕϯτ΁ͷରԠ
w֎෦γεςϜͱͷ࿈‫্ܞ‬ͷ੍໿
‫ٻ‬ΊΒΕΔཁ݅
wੑೳ޲্
wҟৗൃੜ࣌ͷϦΧόϦ
wଟ༷ͳ‫ى‬ಈํࣜ
w͞·͟·ͳೖग़ྗΠϯλϑΣʔε
4QSJOH#BUDI
͕αϙʔτ
4QSJOH#BUDIͱ͸ʁ
8
4QSJOHϑϨʔϜϫʔΫΛϕʔεͱͨ͠ɺ
όονॲཧ޲͚+BWBΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
IUUQTTQSJOHJPCBUDI
4QSJOH#BUDIͱ͸ʁ
9
w ॲཧͷྲྀΕΛఆ‫ܕ‬Խ͢Δ‫ػ‬ೳʢλεΫϨοτɺνϟϯΫʣ
w ༷ʑͳ‫ى‬ಈํ๏ʢίϚϯυϥΠϯɺ4FSWMFU౳ʣ
w ༷ʑͳσʔλ‫ࣜܗ‬ͷೖग़ྗʢϑΝΠϧɺ%#ɺΩϡʔɺ౳ʣ
w ॲཧͷޮ཰Խʢଟॏ࣮ߦɺฒྻ࣮ߦɺ৚݅෼‫ذ‬ɺ౳ʣ
w δϣϒͷ؅ཧʢ࣮ߦঢ়‫گ‬ͷӬଓԽɺϦελʔτɺ౳ʣ
IUUQTUFSBTPMVOBCBUDIHJUIVCJPHVJEFMJOFDVSSFOUKBTJOHMF@JOEFYIUNM$I@4QSJOH#BUDISDI@0WFSWJFX
ఏ‫͞ڙ‬ΕΔ୅දతͳ‫ػ‬ೳ
4QSJOH#BUDIͷ‫ج‬ຊߏ੒
10
4QSJOH#BUDI
+PC-BVODIFS +PC
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMKPCIUNMDPO
fi
HVSF+PC
+PC3FQPTJUPSZ
+PC
+PC
4UFQ
4UFQ
4UFQ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ॲཧͷྲྀΕ
؅ཧσʔλͷྲྀΕ
4QSJOH#BUDIͷ‫ج‬ຊߏ੒
11
4QSJOH#BUDI
+PC-BVODIFS +PC
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMKPCIUNMDPO
fi
HVSF+PC
+PC3FQPTJUPSZ
+PC
+PC
4UFQ
4UFQ
4UFQ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ॲཧͷྲྀΕ
؅ཧσʔλͷྲྀΕ
+PC-BVODIFS
+PCΛ‫ى‬ಈ͢ΔΠϯλʔϑΣΠεɻྫ
͑͹ɺίϚϯυϥΠϯ͔Βͷ‫ى‬ಈ࣌
ʹ+PCΛ‫ى‬ಈ͢ΔͨΊʹ‫ݺ‬͹ΕΔɻ
+PC
όονॲཧͷҰ࿈Λ·ͱΊ࣮ͨ
ߦ୯Ґɻ࣮ࡍͷॲཧ͸4UFQʹ෼ׂ
࣮ͯ͠૷͠‫ͼݺ‬ग़͢ɻ
4QSJOH#BUDIͷ‫ج‬ຊߏ੒
12
4QSJOH#BUDI
+PC-BVODIFS +PC
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMKPCIUNMDPO
fi
HVSF+PC
+PC3FQPTJUPSZ
+PC
+PC
4UFQ
4UFQ
4UFQ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ॲཧͷྲྀΕ
؅ཧσʔλͷྲྀΕ
4UFQ
ॲཧͷ࣮૷΍࣮ߦ؅ཧΛߦ͏࠷খ୯Ґɻͭͷ+PCΛෳ਺ͷ4UFQʹ෼ׂͯ͠
ॲཧ͢Δ͜ͱʹΑΓɺॲཧͷ࠶ར༻ɺฒྻԽɺ৚݅෼‫͕ذ‬ՄೳʹͳΔɻ
νϟϯΫϞσϧ·ͨ͸λεΫϨοτϞσϧͷ͍ͣΕ͔Ͱ࣮૷͢Δɻ
4QSJOH#BUDIͷ‫ج‬ຊߏ੒
13
4QSJOH#BUDI
+PC-BVODIFS +PC
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMKPCIUNMDPO
fi
HVSF+PC
+PC3FQPTJUPSZ
+PC
+PC
4UFQ
4UFQ
4UFQ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ॲཧͷྲྀΕ
؅ཧσʔλͷྲྀΕ
*UFN3FBEFS*UFN1SPDFTTPS*UFN8SJUFS
νϟϯΫϞσϧΛ࣮૷͢ΔࡍʹɺσʔλͷೖྗՃ޻ग़ྗͷͭʹ෼ׂ͢Δ
ͨΊͷΠϯλϑΣʔεɻࣗલͰ࣮૷͢Δ͔ɺ4QSJOH#BUDI͕ఏ‫͢ڙ‬Δ࣮૷
ʢ%#ɺϑΝΠϧͷೖग़ྗॲཧͳͲʣΛར༻͢Δɻ
4QSJOH#BUDIͷ‫ج‬ຊߏ੒
14
4QSJOH#BUDI
+PC-BVODIFS +PC
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMKPCIUNMDPO
fi
HVSF+PC
+PC3FQPTJUPSZ
+PC
+PC
4UFQ
4UFQ
4UFQ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ॲཧͷྲྀΕ
؅ཧσʔλͷྲྀΕ
+PC3FQPTJUPSZ
+PC΍4UFQͷ࣮ߦঢ়ଶɺ݁ՌΛ֎෦%#Ͱ؅ཧ͢ΔͨΊͷΠϯλʔϑΣΠε
‫ۀ‬຿ϩδοΫͱ͸ผτϥϯβΫγϣϯͰ%#ΞΫηεɻ
ʢӬଓԽͨ͘͠ͳ͍৔߹͸ɺ)౳ͷΠϯϝϞϦ%#ʹ֨ೲͤ͞‫ͤ͞ൃش‬Δʣ
ࢀߟɿ+PC3FQPTJUPSZͷςʔϒϧߏ଄
15
https://terasoluna-batch.github.io/guideline/current/ja/single_index.html#Ch02_SpringBatchArch_Arch_MetadataSchema
+PCʢ+PC໊º+PCҾ਺ͷ୯ҐͰ
૿Ճʣ
+PCͷঢ়ଶɾ࣮ߦ݁Ռ
ʢ+PC࣮ߦͷ౓ʹ૿Ճʣ
+PC಺ͷ4UFQͷঢ়ଶɾ࣮ߦ݁Ռ
ʢ4UFQ࣮ߦͷ౓ʹ૿Ճʣ
4UFQίϯςΩετΦϒδΣΫτͷ
γϦΞϥΠζσʔλ
+PCίϯςΩετΦϒδΣΫτ
ͷγϦΞϥΠζσʔλ
+PCҾ਺
)FMMP8PSME
16
4QSJOH#BUDI
)%BUBCBTF
Λ%FQFOEFODZʹ௥Ճ
IUUQTTUBSUTQSJOHJP
޷ΈͰ.BWFO
4UFQɿ4QSJOH*OJUJBMJ[SͰ4QSJOH#BUDIϓϩδΣΫτΛੜ੒
˞4QSJOH#PPUར༻લఏ
)FMMP8PSME
17
dependencies


dependency


groupIdorg.springframework.boot/groupId


artifactIdspring-boot-starter-batch/artifactId


/dependency


dependency


groupIdcom.h2database/groupId


artifactIdh2/artifactId


scoperuntime/scope


/dependency


...
4UFQɿ4QSJOH#BUDIͷTUBSUFS͕ద༻͞Ε͍ͯΔ͜ͱΛ֬ೝ
˞4QSJOH#PPUར༻લఏ
)FMMP8PSME
18
@Bea
n

@StepScop
e

public Tasklet demoTakslet()
{

return new Tasklet()
{

@Overrid
e

public RepeatStatus execute(StepContribution stepContribution
,

ChunkContext chunkContext) throws Exception
{

StepExecution stepExecution = stepContribution.getStepExecution()
;

JobParameters jobParameters = stepExecution.getJobParameters()
;

String firstName = jobParameters.getString(firstName)
;

String lastName = jobParameters.getString(lastName)
;

log.info(Hello World, {} {}, lastName, firstName)
;

return RepeatStatus.FINISHED
;

}

}
;

}

4UFQɿδϣϒύϥϝʔλʢίϚϯυҾ਺ʣΛϩάʹग़ྗ͢ΔλεΫϨοτΛ࣮૷
˞4QSJOH#PPUར༻લఏ
)FMMP8PSME
19
@Bea
n

@StepScop
e

public Tasklet demoTakslet()
{

return new Tasklet()
{

@Overrid
e

public RepeatStatus execute(StepContribution stepContribution
,

ChunkContext chunkContext) throws Exception
{

StepExecution stepExecution = stepContribution.getStepExecution()
;

JobParameters jobParameters = stepExecution.getJobParameters()
;

String firstName = jobParameters.getString(firstName)
;

String lastName = jobParameters.getString(lastName)
;

log.info(Hello World, {} {}, lastName, firstName)
;

return RepeatStatus.FINISHED
;

}

}
;

}

4UFQɿδϣϒύϥϝʔλʢίϚϯυҾ਺ʣΛϩάʹग़ྗ͢ΔλεΫϨοτΛ࣮૷
˞4QSJOH#PPUར༻લఏ
5BTLMFUΠϯλʔϑΣΠεΛ࣮૷͠#FBOొ࿥
)FMMP8PSME
20
@Bea
n

@StepScop
e

public Tasklet demoTakslet()
{

return new Tasklet()
{

@Overrid
e

public RepeatStatus execute(StepContribution stepContribution
,

ChunkContext chunkContext) throws Exception
{

StepExecution stepExecution = stepContribution.getStepExecution()
;

JobParameters jobParameters = stepExecution.getJobParameters()
;

String firstName = jobParameters.getString(firstName)
;

String lastName = jobParameters.getString(lastName)
;

log.info(Hello World, {} {}, lastName, firstName)
;

return RepeatStatus.FINISHED
;

}

}
;

}

4UFQɿδϣϒύϥϝʔλʢίϚϯυҾ਺ʣΛϩάʹग़ྗ͢ΔλεΫϨοτΛ࣮૷
˞4QSJOH#PPUར༻લఏ
δϣϒύϥϝʔλ
Λऔಘ
ϩάʹδϣϒύϥϝʔλΛग़ྗ
)FMMP8PSME
21
@Bea
n

public Step demoStep(JobRepository jobRepository,
PlatformTransactionManager transactionManager, Tasklet tasklet)
{

return new StepBuilder(demoStepTasklet, jobRepository
)

.tasklet(tasklet, transactionManager
)

.build()
;

}

4UFQɿ4UFQΛ࡞੒ɾొ࿥͠ɺ4UFQͷλεΫϨοτΛઃఆ͢Δ
˞4QSJOH#PPUར༻લఏ
લड़5BTLMFUΛ‫ͼݺ‬ग़͢4UFQΛ࡞੒
)FMMP8PSME
22
@Bea
n

public Job demoJob(JobRepository jobRepository, Step step)
{

return new JobBuilder(demoJob, jobRepository
)

.start(step
)

.build()
;

}

4UFQɿ+PCΛ࡞੒ɾొ࿥͠ɺ4UFQͷ4UFQΛઃఆ͢Δ
˞4QSJOH#PPUར༻લఏ
લड़4UFQΛ‫ͼݺ‬ग़͢+PCΛ࡞੒
)FMMP8PSME
23
$ mvn package
...
$ java -jar target/demo-batch-v5-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/ / ___'_ __ _ _(_)_ __ __ _    
( ( )___ | '_ | '_| | '_ / _` |    
/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.4)
...
2023-03-11T02:08:47.138+09:00 INFO 63289 --- [ main]
c.e.demobatchv5.DemoBatchV5Application : Hello World, null null
...
4UFQɿΞϓϦέʔγϣϯΛ࣮ߦ͢ΔʢίϚϯυҾ਺ͳ͠ʣ
˞4QSJOH#PPUར༻લఏ
ϩά͸ग़͕ͨɺδϣϒύϥϝʔλʢίϚϯυҾ
਺ʣະࢦఆͷͨΊOVMM
)FMMP8PSME
24
$ mvn package
...
$ java -jar target/demo-batch-v5-0.0.1-SNAPSHOT.jar firstName=TARO
lastName=SATO
. ____ _ __ _ _
/ / ___'_ __ _ _(_)_ __ __ _    
( ( )___ | '_ | '_| | '_ / _` |    
/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.4)
...
2023-03-11T02:11:51.087+09:00 INFO 63302 --- [ main]
c.e.demobatchv5.DemoBatchV5Application : Hello World, SATO TARO
...
4UFQɿΞϓϦέʔγϣϯΛ࣮ߦ͢ΔʢίϚϯυҾ਺͋Γʣ
˞4QSJOH#PPUར༻લఏ
δϣϒύϥϝʔλ͕ਖ਼͘͠දࣔ͞Εͨ
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳ
25
5BTLMFUͱ͸ʁ$IVOLͱ͸ʁ
26
5BTLMFUϞσϧ
‫ۀ‬຿ϩδοΫ
$IVOLϞσϧ
‫ۀ‬຿ϩδοΫ
ࣗ༝ʹίʔυΛ૊Ή
ϧʔϓ੍‫ޚ‬
ʢνϟϯΫ
୯Ґʣ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
ઃఆ֦ு
ઃఆ֦ு
ઃఆ֦ு
ͬ͘͟Γͷҧ͍
@Bea
n

@StepScop
e

public Tasklet demoTakslet()
{

return new Tasklet()
{

@Overrid
e

public RepeatStatus execute(StepContribution stepContribution
,

ChunkContext chunkContext) throws Exception
{

// ϏδωεϩδοΫΛ࣮૷
return RepeatStatus.FINISHED
;

}

}
;

}

@Bea
n

public Step demoStep(JobRepository jobRepository,
PlatformTransactionManager transactionManager, Tasklet tasklet)
{

return new StepBuilder(demoStepTasklet, jobRepository
)

.tasklet(tasklet, transactionManager
)

.build()
;

}

5BTLMFUʢλεΫϨοτʣϞσϧͷ࣮૷ྫ
27
5BTLMFUΠϯλʔϑΣΠεΛ࣮૷͠#FBOొ࿥
5BTLMFU#FBOΛ4UFQʹొ࿥
$IVOLʢνϟϯΫʣϞσϧͷ࣮૷ྫ 
28
@Bea
n

@StepScop
e

public FlatFileItemReader fileItemReader
(

@Value(#{jobParameters['inputFile']}) String filePath) {
// தུ
FlatFileItemReaderInputHoge fileItemReade
r

= new FlatFileItemReader()
;

fileItemReader.setResource(new FileSystemResource(filePath))
;

fileItemReader.setLineMapper(lineMapper)
;

return fileItemReader
;

}

@Bea
n

@StepScop
e

public ItemProcessor itemProcessor()
{

return new ItemProcessorInputHoge, OutputFuga()
{

@Overrid
e

public OutputFuga process(InputHoge inputHoge
)

throws Exception
{

// தུ(ೖྗInputHogeग़ྗOutputFugaͷม‫׵‬ϩδοΫ
)

return outputFuga
;

}

}
;

}
ᶃ*UFN3FBEFSͷ#FBOఆٛ
ʢྫͰ͸$47ϑΝΠϧೖྗʣ
ᶄ*UFN1SPDFTTPSͷ#FBOఆٛ
4QSJOH#BUDIఏ‫ڙ‬Ϋϥεʹઃఆద༻
$IVOLʢνϟϯΫʣϞσϧͷ࣮૷ྫ 
29
@Bea
n

@StepScop
e

public FlatFileItemReader fileItemReader
(

@Value(#{jobParameters['inputFile']}) String filePath) {
// தུ
FlatFileItemReaderInputHoge fileItemReade
r

= new FlatFileItemReader()
;

fileItemReader.setResource(new FileSystemResource(filePath))
;

fileItemReader.setLineMapper(lineMapper)
;

return fileItemReader
;

}

@Bea
n

@StepScop
e

public ItemProcessor itemProcessor()
{

return new ItemProcessorInputHoge, OutputFuga()
{

@Overrid
e

public OutputFuga process(InputHoge inputHoge
)

throws Exception
{

// தུ(ೖྗInputHogeग़ྗOutputFugaͷม‫׵‬ϩδοΫ
)

return outputFuga
;

}

}
;

}
Ճ޻લʢ*UFN3FBEFS͔ΒͷJOQVUʣ
Ճ޻‫ޙ‬ʢ*UFN8SJUFS΁ͷPVUQVUʣ
Ճ޻લʢ*UFN1SPDFTTPS΁
ͷPVUQVUʣ
@Bea
n

@StepScop
e

public FlatFileItemWriter fileItemWriter
(

@Value(#{jobParameters['outputFile']}) String filePath)
{

// தུ
FlatFileItemWriterOutputFuga fileItemWrite
r

= new FlatFileItemWriter()
;

fileItemWriter.setResource(new FileSystemResource(filePath))
;

fileItemWriter.setLineAggregator(aggregator)
;

return fileItemWriter
;

}
$IVOLʢνϟϯΫʣϞσϧͷ࣮૷ྫ 
30
@Bea
n

public Step demoStepChunk(JobRepository jobRepository, PlatformTransactionManager
transactionManager, ItemReaderInputHoge reader, ItemProcessorInputHoge,
OutputFuga processor, ItemWriterOutputFuga writer)
{

return new StepBuilder(demoChunk, jobRepository
)

.InputHoge, OutputFugachunk(10, transactionManager
)

.reader(reader
)

.processor(processor
)

.writer(writer
)

.build()
;

}
ᶅ8SJUFSͷ#FBOఆٛ
ʢྫͰ͸$47ϑΝΠϧग़ྗʣ
ᶆ*UFN3FBEFS*UFN1SPDFTTPS*UFN8SJUFS
֤#FBOΛ4UFQʹొ࿥
νϟϯΫαΠζ
ઃఆ
4QSJOH#BUDIఏ‫ڙ‬Ϋϥεʹઃఆద༻
ࢀߟɿ୅දతͳ3FBEFS1SPDFTTPS8SJUFS
31
*UFN3FBEFS *UFN1SPDFTTPS *UFN8SJUFS
ϑΝΠϧ
FlatFileItemReader
StaxEventItemReader
JsonFileItemReader
 FlatFileItemWriter
StaxEventItemWriter
JsonFileItemWriter
%#
JdbcCursorItemReader
JdbcPagingItemReader
MyBatisCursorItemReader
MyBatisPagingItemReader
JpaPagingItemReader
HibernateCursorItemReader
HibernatePagingItemReader
 JdbcBatchItemWriter
MyBatisBatchItemWriter
JpaItemWriter
HibernateItemWriter
ͦͷଞ
MongoItemReader
JmsItemReader
AmqpItemReader
PassThroughItemProcessor
ValidatingItemProcessor
CompositeItemProcessor
JmsItemWriter
AmqpItemWriter
ࢀߟɿ5BTLMFUͱ$IVOLͷؔ܎
32
4QSJOH#BUDIશମ૾
https://terasoluna-batch.github.io/guideline/current/ja/single_index.html#Ch02_SpringBatchArch_Arch_BusinessLogic
ࢀߟɿ5BTLMFUͱ$IVOLͷؔ܎
33
4QSJOH#BUDIશମ૾
https://terasoluna-batch.github.io/guideline/current/ja/single_index.html#Ch02_SpringBatchArch_Arch_BusinessLogic
͍ΘΏΔ5BTLMFU
͍ΘΏΔ$IVOL
ಛ௃
34
‫఺؍‬ 5BTLMFUϞσϧ $IVOLϞσϧ ߟ࡯
‫ۀ‬຿ϩδοΫ
‫ه‬ड़ͷࣗ༝౓
ࣗ༝౓ߴ͍
ʢϩδοΫશͯΛ։ൃऀ
͕‫ه‬ड़ʣ
ࣗ༝౓௿͍
ʢ3FBEFSɺ1SPDFTTPSɺ
8SJUFSͷ૊Έ߹Θͤʣ
$IVOL͸ઃ‫ߏͰ఺࣌ܭ‬଄
ҙ͕ࣝඞཁͰɺ5BTLMFUΑ
Γ΋ֶशίετߴ͍ɻ
τϥϯβΫγ
ϣϯ
̍τϥϯβΫγϣϯ
݅਺ʗνϟϯΫαΠζ
ʹ෼ׂ
ϦϥϯͰϦΧόϦ͍ͨ͠
৔߹͸5BTLMFUɺ
ϦελʔτͰϦΧόϦ΍
େྔσʔλॲཧʹ͸
$IVOLɻ
Ϧελʔτ ະରԠ ରԠ
https://terasoluna-batch.github.io/guideline/current/ja/single_index.html#Ch03_ChunkOrTasklet
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳʢωΠςΟϒαϙʔτɺ
0CTFSWBCJMJUZʣ
35
4QSJOH#BUDI
36
w 4QSJOHੈ୅ͷ4QSJOH#BUDI
w 4QSJOHͷ(SBBM7.ωΠςΟϒϏϧυ΍0CTFSWBCJMJUZʹ௥ै
w 4QSJOH#BUDI͔Βͷඇ‫׵ޓ‬ੑ͸গ͋͠Γ
4QSJOH
4QSJOH#BUDI
4QSJOH#PPU
4QSJOH
4QSJOH#BUDI
4QSJOH#PPU
+BWB ʙ PS ʙ
+BWB
+BLBSUB
ʙ
5PNDBU +FUUZ
ʙ
5PNDBU +FUUZ
)JCFSOBUF
4QSJOH#BUDIͷαϙʔτ‫ؒظ‬
37 IUUQTTQSJOHJPQSPKFDUTTQSJOHCBUDITVQQPSU
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳ
38
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
39
39
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
40
40
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
41
41
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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༻ͷτϥϯβΫ
γϣϯϚωʔδϟ͕ΞϓϦέʔ
γϣϯͰ‫͞༻ޡ‬ΕΔͷΛ๷͙ɻ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
42
42
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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͕࢖͏+%#$
σʔλιʔε΍τϥϯβΫγϣ
ϯϚωʔδϟΛΧελϜՄೳ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
43
43
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
+PC΍4UFQͷ#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
+PC΍4UFQͷ#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Ͱ࢖༻͢ΔτϥϯβΫγϣϯϚωʔδϟΛ໌ࣔతʹࢦఆ͢Δඞཁ͋Γ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
46
46
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
δϣϒύϥϝʔλͷ‫ܕ‬ɺࢦఆ‫ࣜܗ‬ͷมߋ
47
[+|-]ύϥϝʔλ໊(ύϥϝʔλͷ‫=)ܕ‬ύϥϝʔλͷ஋
ύϥϝʔλ໊=ύϥϝʔλͷ஋,ύϥϝʔλͷ‫ܕ‬,identificationFla
g

o
r

ύϥϝʔλ໊='{value: ύϥϝʔλͷ஋, “type:ύϥϝʔλͷ‫ܕ‬,
identifying: “boolean஋”}’
7
7
w δϣϒύϥϝʔλʢ‫ى‬ಈҾ਺ʣʹ࢖͑Δ‫ܕ‬ͷ੍໿͕؇࿨͞Εͨ
w δϣϒύϥϝʔλͷࢦఆ‫ܕ͕ࣜܗ‬ͷվળʹ߹Θͤͯ‫ݟ‬௚͞Εͨ
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMXIBUTOFXIUNMTVQQPSUGPSBOZUZQFBTBKPCQBSBNFUFS
࢖༻Մೳͳ‫ܕ‬ QBSBNFUFS5ZQF ͸TUSJOH MPOH EPVCMF EBUFͷΈ
w ‫ܕ‬ QBSBNFUFS5ZQF ͸ɺGVMMZRVBMJ
fi
FEͳ‫໊ܕ‬ʢྫɿKBWBUJNF-PDBM%BUFʣɺলུ࣌͸
4USJOHɻ࢖༻Մೳͳ‫ܕ‬͸$POWFSTJPO4FSWJDFʹΑΓ֦ுՄೳɻ
w JEFOUJ
fi
DBUJPO'MBH͸ɺδϣϒΠϯελϯεΛಛఆ͢ΔΩʔʹ‫ؚ‬ΊΔ͔൱͔ʢলུ࣌͸USVFʣ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
48
48
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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Ҡ২ʁʣ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
49
49
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
ςʔϒϧ 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
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
51
51
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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Λੜ੒
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
52
52
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
4QSJOH#PPUͰ!OBCMF#BUDI1SPDFTTJOH͕ෆཁ
53
@SpringBootApplicatio
n

@EnableBatchProcessin
g

public class BatchDemo01Application
{

…
@SpringBootApplicatio
n

//@EnableBatchProcessin
g

public class BatchDemo01Application
{

…
7
7
w 4QSJOH#BUDI·Ͱ͸!OBCMF9YY͕ඞཁ͕ͩͬͨɺෆཁʹͳͬͨɻ
w ෇༩ͯ͠͠·͏ͱ+PC͕‫ى‬ಈ͠ͳ͍ࣄ৅͕ൃੜ͢ΔͷͰ஫ҙ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFFOBCMFCBUDIQSPDFTTJOHJTOPXEJTDPVSBHFE
˞৽ઃ͞Εͨ%FGBVMU#BUDI$PO
fi
HVSBUJPOͷ֦ுʹΑΓɺVUP$PO
fi
Hͷ্ॻ͖ઃఆ͕Մೳɻ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDIJTTVFT
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
54
54
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
%FGBVMU#BUDI$PO
fi
HVSBUJPO
55
55
w !OBCMF#BUDI1SPDFTTJOHҎ֎ͷ৽ͨͳ4QSJOH#BUDIॳ‫ظ‬Խखஈ
w 4QSJOH#PPUͷVUP$PO
fi
Hͱͷซ༻͕Մೳ
@Configuratio
n

class MyBatchConfiguration extends DefaultBatchConfiguration
{

@Overrid
e

protected Charset getCharset()
{

// σϑΥϧτUTF-8͔Βมߋ
return StandardCharsets.ISO_8859_1
;

}

}

7
ར༻ྫˍσϑΥϧτઃఆΛมߋ͢Δྫ
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTBQJPSHTQSJOHGSBNFXPSLCBUDIDPSFDPO
fi
HVSBUJPOTVQQPSU%FGBVMU#BUDI$PO
fi
HVSBUJPOIUNM
˞ྨࣅͨ͠‫ػ‬ೳΛ͜Ε·Ͱఏ‫͍ͨͯ͠ڙ‬#BUDI$PO
fi
HVSFS͸ഇࢭ
4QSJOH#BUDI͔Βͷมߋʢൈਮʣ
56
56
w +BWB͕ϕʔεϥΠϯ
w .BQϕʔε+PC3FQPTJUPSZͷഇࢭ
w τϥϯβΫγϣϯϚωʔδϟ#FBO͕ඇެ։
w !OBCMF#BUDI1SPDFTTJOHʹଐੑ௥Ճ
w +PC΍4UFQͷ#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
4QSJOH#PPUͷෳ਺+PC࣮ߦ‫ػ‬ೳͷഇࢭ
57
$ java -jar myapp.jar -Dspring.batch.job.names=Job໊※
JobҾ਺໊1=஋1 JobҾ਺໊2=஋2 ...
˞ΧϯϚ۠੾Ͱෳ਺ࢦఆՄೳɺলུ࣌͸શ+PC͕‫ى‬ಈ
$ java -jar myapp.jar -Dspring.batch.job.name=Job໊※
JobҾ਺໊1=஋1 JobҾ਺໊2=஋2 ...
7
7
˞ΧϯϚ۠੾Ͱෳ਺ࢦఆෆՄɺলུ࣌͸+PC͕‫͋Ͱݸ‬Δඞཁ͋Γ
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ4QSJOH#PPU.JHSBUJPO(VJEFTQSJOHCBUDIDIBOHFT
ෳ਺+PCΛ࿈ଓ࣮ߦ͢Δ‫ػ‬ೳ͕ഇࢭ͞Εͨɻ
ύϥϝʔλ໊΋OBNFTˠOBNFʹมߋ͞Ε͍ͯΔͨΊ஫ҙɻ
ΞδΣϯμ
w4QSJOH#BUDIͱ͸ʁ
w5BTLMFUWT$IVOL
w4QSJOH#BUDI
w4QSJOH#BUDI͔Βͷมߋ
w৽‫ػ‬ೳ
58
w৽‫ػ‬ೳɿ(SBBM7.ωΠςΟϒαϙʔτ
w৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
59
৽‫ػ‬ೳɿ(SBBM7.ωΠςΟϒαϙʔτ
60
4QSJOH΍4QSJOH#PPUͷ(SBBM7.ωΠςΟϒαϙʔτʹΑΓɺ
4QSJOH#BUDIΞϓϦέʔγϣϯ΋ωΠςΟϒϏϧυʹରԠ
ʢ4QSJOH΍4QSJOH#PPUͷωΠςΟϒαϙʔτࣗମʹ͍ͭͯ͸ׂѪʣ
60
όονΞϓϦέʔγϣϯͱͯ͠ͷ‫ظ‬଴
w ‫ى‬ಈ࣌ؒͷ୹ॖʢΦϯϥΠϯΞϓϦέʔγϣϯΑΓޮՌ͕େ͖͍ʣ
w όονͳΒͰ͸ͷෳࡶ‫ॲࢉܭ‬ཧͷ୹ॖʢྫ͑͹େྔιʔτͳͲʣ
ͬͦ͘͞‫ͯ͠ূݕ‬ΈΔ
(SBBM7.ωΠςΟϒαϙʔτɿ‫ى‬ಈ࣌ؒͷ‫ূݕ‬
61
61
4UFQɿ4QSJOH*OJUJBMJ[SͰ4QSJOH#BUDIϓϩδΣΫτΛੜ੒
(SBBM7./BUJWF4VQQPSU
4QSJOH#BUDI
)%BUBCBTF
Λ%FQFOEFODZʹ௥Ճ
ϛχϚϜͳόονΞϓϦέʔγϣϯΛωΠςΟϒϏϧυ͠ɺ‫ى‬ಈ࣌ؒΛൺֱͯ͠ΈΔ
IUUQTTUBSUTQSJOHJP
ࠓճ͸.BWFO
(SBBM7.ωΠςΟϒαϙʔτɿ‫ى‬ಈ࣌ؒͷ‫ূݕ‬
62
62
4UFQɿۭͷ5BTLMFUΛ࣮૷͠ɺ+PC΍4UFQʹ૊ΈࠐΉ
@Bea
n

public Tasklet demoTakslet()
{

return new Tasklet()
{

@Overrid
e

public RepeatStatus execute(StepContribution stepContribution
,

ChunkContext chunkContext) throws Exception
{

log.info(test tasklet 01.)
;

return RepeatStatus.FINISHED
;

}

}
;

}

// ҎԼུ
(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
...
(SBBM7.ωΠςΟϒαϙʔτɿ‫ى‬ಈ࣌ؒͷ‫ূݕ‬
64
64
4UFQɿCVJMEQBDLTͰωΠςΟϒϏϧυʢ%PDLFSඞཁʣ
$ mvn -Pnative spring-boot:build-image
...
[INFO] [creator] [1/7] Initializing... (15.3s @ 0.15GB)
[INFO] [creator] [2/7] Performing analysis... [********] (221.6s @ 2.13GB)
[INFO] [creator] [3/7] Building universe... (34.7s @ 2.88GB)
[INFO] [creator] [4/7] Parsing methods... [*****] (23.0s @ 1.97GB)
[INFO] [creator] [5/7] Inlining methods... [***] (14.5s @ 2.43GB)
[INFO] [creator] [6/7] Compiling methods... [*************] (177.1s @ 2.48GB)
[INFO] [creator] [7/7] Creating image... (16.4s @ 3.38GB)
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10:17 min
[INFO] Finished at: 2023-03-08T22:39:04+09:00
[INFO] Final Memory: 32M/120M
[INFO] ------------------------------------------------------------------------
ʢࢀߟʣ%PDLFS%FTLUPQʹ$16(#ׂ౰!.BDCPPL
(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
...
(SBBM7.ωΠςΟϒαϙʔτɿ‫ى‬ಈ࣌ؒͷ‫ূݕ‬
66
66
ൺֱ
‫఺؍‬ +7. ωΠςΟϒ
‫ى‬ಈ࣌ؒ NT NT
4UFQ࣮ߦ࣌ؒ
ۭ5BTLMFU
NT NT
+PC࣮ߦ࣌ؒ NT NT
‫ى‬ಈ࣌ؒͷׂ߹͕ଟ͘઎ΊΔɺ୹໋ͷόονॲཧͷ৔߹ޮՌ͕େ͖͍
ʢྫɿ୹प‫ظ‬తʹ‫܁‬Γฦ͠‫ى‬ಈ͞ΕΔ૟আόονʗ1PMMJOHόονͳͲʣ
w৽‫ػ‬ೳɿ(SBBM7.ωΠςΟϒαϙʔτ
w৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
67
৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
68
4QSJOH#BUDI4QSJOH#PPU
+PC
4UFQ
4UFQ
4UFQ
;JQLJO౳
.JDSPNFUFS
4QSJOH΍.JDSPNFUFSͷ0CTFSWBCJMJUZ‫ػ‬ೳͷ࢓૊ΈΛ༻͍ͨɺ
όονॲཧͷτϨʔεऩूʹରԠʢ+PC4UFQʣ
68
όονॲཧͷੑೳղੳʢϘτϧωοΫ෼ੳʣ΍
ΩϟύγςΟϓϥϯͳͲʹ‫༻׆‬Մೳ
3FQPSU
৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
+PC࣮ߦ୯ҐʹτϨʔε͕੾ΒΕɺ4UFQ୯Ґʹεύϯ͕੾ΒΕΔ
+PC
EFNP@
4UFQ
EFNP@UBTLMFU
3FTU5FNQMBUF
IUUQHFU 
4UFQ
EFNP@DIVOL
ߏ੒ྫ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
69
৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
+PC࣮ߦ୯ҐʹτϨʔε͕੾ΒΕɺ4UFQ୯Ґʹεύϯ͕੾ΒΕΔ
+PC
EFNP@
4UFQ
EFNP@UBTLMFU
3FTU5FNQMBUF
IUUQHFU 
4UFQ
EFNP@DIVOL
ߏ੒ྫ
τϨʔεऩू݁Ռ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
70
৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
+PC࣮ߦ୯ҐʹτϨʔε͕੾ΒΕɺ4UFQ୯Ґʹεύϯ͕੾ΒΕΔ
+PC
EFNP@
4UFQ
EFNP@UBTLMFU
3FTU5FNQMBUF
IUUQHFU 
4UFQ
EFNP@DIVOL
ߏ੒ྫ
τϨʔεऩू݁Ռ
*UFN3FBEFS
*UFN1SPDFTTPS
*UFN8SJUFS
δϣϒɿτϨʔε
4UFQɿεύϯ 4UFQɿεύϯ
3FTU5FNQMBUFɿεύϯ
4QSJOHຊମͷ‫ػ‬ೳ
εύϯର৅֎
71
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿҎԼͷ#FBO1PTU1SPDFTTPSΛ#FBOఆٛ
@Bea
n

public static BatchObservabilityBeanPostProcesso
r

batchObservabilityBeanPostProcessor()
{

return new BatchObservabilityBeanPostProcessor()
;

}

ຊདྷɺ!OBCMF#BUDI1SPDFTTJOHͰ༗ޮʹͳΔ͕ɺ
4QSJOH#PPUར༻࣌͸!OBCMF#BUDI1SPDFTTJOHΛར༻Ͱ͖ͳ͍ͨΊɺ
4QSJOH#PPU࣌఺Ͱ͸ࣗલఆٛ͢Δඞཁ͕͋Δɻ
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMNPOJUPSJOHBOENFUSJDTIUNMUSBDJOH
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUQVMM
72
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿ4QSJOHDUVBUPS΍.JDSPNFUFSͷ૊ΈࠐΈʢ.BWFOͷ৔߹ʣ
dependency


groupIdorg.springframework.boot/groupId


artifactIdspring-boot-starter-actuator/artifactId


/dependency


dependency


groupIdio.micrometer/groupId


artifactIdmicrometer-tracing-bridge-brave/artifactId


/dependency


dependency


groupIdio.zipkin.reporter2/groupId


artifactIdzipkin-reporter-brave/artifactId


/dependency


dependency !-- Spring MVC/WebFluxະ࢖༻࣌ʹඞཁ --


groupIdio.zipkin.reporter2/groupId


artifactIdzipkin-sender-urlconnection/artifactId


/dependency
#SBWF‫ܦ‬༝Ͱ;JQLJOʹૹ৴͢Δ৔߹ͷྫɻͦͷଞͷτϨʔαʔ࣮૷ར༻΋ՄೳʢϦϑΝϨϯεࢀরʣɻ
IUUQTEPDTTQSJOHJPTQSJOHCPPUEPDTSFGFSFODFIUNMTJOHMFBDUVBUPSNJDSPNFUFSUSBDJOHHFUUJOHTUBSUFE
73
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿBQQMJDBUJPOQSPQFSUJFT PSZNM ʹτϨʔεؔ࿈ͷઃఆ
spring.application.name=batchdem
o

management.tracing.sampling.probability=1.
0

management.zipkin.tracing.endpoint=http://localhost:9411/api/v2/span
s

ʜQSPCBCJMJUZ͸τϨʔεऩूͷαϯϓϦϯά཰ɺͰऩूɻ
FOEQPJOU͸;JQLJOͷΤϯυϙΠϯτΛࢦఆ͢Δ͕ɺ্‫ه‬͸σϑΥϧτ஋ͷͨΊলུՄೳ
4UFQɿΞϓϦέʔγϣϯ͕ॲཧ‫͙͢ʹޙྃ׬‬ϓϩηεऴྃ͠ͳ͍Α͏ʹ͢Δ
public static void main(String[] args
)	
throws InterruptedException
{

ConfigurableApplicationContext contex
t

= SpringApplication.run(BatchDemo01Application.class, args)
;

Thread.sleep(10000)
;

System.exit(SpringApplication.exit(context))
;

}

Ϛγϯঢ়‫ʹگ‬Αͬͯ͸τϨʔε৘ใ͕ඈ͹ͳ͍έʔε͕‫ݟ‬ΒΕͨͷͰɺϫʔΫΞϥ΢ϯυͱͯ͠ඵ଴‫ػ‬ɻ
74
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿ;JQLJOαʔόͷߏங
$ docker run -d -p 9411:9411 openzipkin/zipkin
IUUQT[JQLJOJPQBHFTRVJDLTUBSUIUNM
75
$ curl -sSL https://zipkin.io/quickstart.sh | bash -s
$ java -jar zipkin.jar
0S
IUUQMPDBMIPTU
8FCϒϥ΢βͰӈ‫ه‬63-ʹΞΫηε
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿόονΞϓϦέʔγϣϯͷ࣮ߦ
76
4UFQɿ;JQLJOը໘Ͱʮ36/263:ʯΛԡԼ
τϨʔεʢʹ+PC࣮ߦʣ͕දࣔ͞ΕΔ
.JDSPNFUFSʹΑΔτϨʔεऩूɿ࣮૷ํ๏ ;JQLJO
4UFQɿόονΞϓϦέʔγϣϯͷ࣮ߦ
77
4UFQɿ;JQLJOը໘Ͱʮ36/263:ʯΛԡԼ
τϨʔεʹ‫·ؚ‬ΕΔεύϯʢʹ4UFQ࣮ߦͳͲʣ͕දࣔ͞ΕΔ
w৽‫ػ‬ೳɿ(SBBM7.ωΠςΟϒαϙʔτ
w৽‫ػ‬ೳɿ.JDSPNFUFSʹΑΔτϨʔεऩू
w ৽‫ػ‬ೳͰͳ͍͚Ͳɿ.JDSPNFUFSʹΑΔϝτϦΫεऩू
78
৽‫ػ‬ೳͰͳ͍͚Ͳɿ.JDSPNFUFSʹΑΔϝτϦΫεऩू
79
4QSJOH#BUDI4QSJOH#PPU
+PC
4UFQ
4UFQ
4UFQ
1SPNFUIFVT
1VTIHBUFXBZ౳
.JDSPNFUFS
4QSJOH΍.JDSPNFUFSͷ0CTFSWBCJMJUZ‫ػ‬ೳͷ࢓૊ΈΛ༻͍ͨɺ
όονॲཧͷϝτϦΫεऩूʹରԠ 4QSJOH#BUDI
79
ϓϩηε͕ඇৗறͷͨΊ1SPNFUIFVT͔Β௚઀QVMMͰ͖ͳ͍ͨΊɺ
QVTIHBUFXBZΛհͯ͠1SPNFUIFVTʹऩू͢Δɻ
ৄࡉ͸ҎԼͷຘ͞Μͷ೥ͷϒϩάΛࢀর
$MPVE'PVOESZ্Ͱ࣮ߦͨ͠4QSJOH#BUDIΞϓϦͷ.FUSJDTΛ1SPNFUIFVT1VTIHBUFXBZʹૹΔ
IUUQTCMPHJLBNFOUSJFT
1SPNFUIFVT౳ (SBGBOB౳
1VTI
4DSBQF %BUBTPVSDF
৽‫ػ‬ೳͰͳ͍͚Ͳɿ.JDSPNFUFSʹΑΔϝτϦΫεऩू
4QSJOH#BUDI͕ެ։͢ΔϝτϦΫε
IUUQTEPDTTQSJOHJPTQSJOHCBUDIEPDTSFGFSFODFIUNMNPOJUPSJOHBOENFUSJDTIUNMCVJMUJONFUSJDT
IUUQTEPDTTQSJOHJPTQSJOHCPPUEPDTSFGFSFODFIUNMBDUVBUPSIUNMBDUVBUPSNFUSJDTTVQQPSUFE
4QSJOH#PPUඪ४ͷϝτϦΫε
+7.৘ใʢ)FBQɺεϨου਺౳ʣ΍$16ɺ‫ى‬ಈ࣌ؒͳͲ
.JDSPNFUFSʹΑΔϝτϦΫεऩूɿ࣮૷ํ๏ 1VTIHBUFXBZ
4UFQɿ4QSJOHDUVBUPS΍.JDSPNFUFSͷ૊ΈࠐΈʢ.BWFOͷ৔߹ʣ
dependency


groupIdorg.springframework.boot/groupId


artifactIdspring-boot-starter-actuator/artifactId


/dependency


dependency


groupIdio.micrometer/groupId


artifactIdmicrometer-registry-prometheus/artifactId


/dependency


dependency


groupIdio.prometheus/groupId


artifactIdsimpleclient_pushgateway/artifactId


/dependency


81
IUUQTEPDTTQSJOHJPTQSJOHCPPUEPDTSFGFSFODFIUNMBDUVBUPSIUNMBDUVBUPSNFUSJDTFYQPSUQSPNFUIFVT
.JDSPNFUFSʹΑΔϝτϦΫεऩूɿ࣮૷ํ๏ 1VTIHBUFXBZ
4UFQɿBQQMJDBUJPOQSPQFSUJFT PSZNM ʹ1VTIHBUFXBZૹ৴ͷઃఆ
management.metrics.distribution.percentiles-histogram.spring.batch=tru
e

management.prometheus.metrics.export.pushgateway.enabled=tru
e

management.prometheus.metrics.export.base-url=http://localhost:909
1

management.prometheus.metrics.export.pushgateway.job=batchdem
o

management.prometheus.metrics.export.pushgateway.shutdown-operation: pus
h

4UFQɿ1VTIHBUFXBZ1SPNFUIFVT(SBGBOBΛߏஙʢུʣ
scrape_configs:
- job_name: 'pushgateway'
honor_labels: true
static_configs:
- targets:
- 'host.docker.internal:9091'
ᶃ1SPNFUIFVTˠ1VTIHBUFXBZͷεΫϨΠϐϯάઃఆ
ɹ QSPNFUIFVTZNM
82
ᶄ(SBGBOBˠ1SPNFUIFVTͷσʔλιʔεࢀরઃఆ
ɹ(SBGBOBͷ(6*ίϯιʔϧ 8FCϒϥ΢β ͔ΒՄೳ
ᶄ
ᶃ
1PSU 1PSU
.JDSPNFUFSʹΑΔϝτϦΫεऩूɿ࣮૷ํ๏ 1VTIHBUFXBZ
4UFQɿ(SBGBOBμογϡϘʔυ 8FCϒϥ΢β Ͱͷ֬ೝ
83
)FBQ΍$16ෛՙͳͲͷ
4QSJOH#PPU͕ऩू͢Δ
ඪ४ϝτϦΫε͕‫ݟ‬ΕΔ
IUUQTHSBGBOBDPNHSBGBOBEBTICPBSET
TQSJOHCPPUTUBUJTUJDT
4QSJOH#PPU4UBUJTUJDT
μογϡϘʔυΛద༻
.JDSPNFUFSʹΑΔϝτϦΫεऩूɿ࣮૷ํ๏ 1VTIHBUFXBZ
4UFQɿ(SBGBOBμογϡϘʔυ 8FCϒϥ΢β Ͱͷ֬ೝ4QSJOH#BUDIϝτϦΫε
84
IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCBUDICMPCNBJOTQSJOH
CBUDITBNQMFTTSDHSBGBOBTQSJOHCBUDIEBTICPBSEKTPO
ҎԼͷμογϡϘʔυΛద༻ +PCͷ࣮ߦ࣌ؒ΍
νϟϯΫॲཧͷεϧʔϓοτ͕‫ݟ‬ΕΔ
·ͱΊ
85
w 4QSJOH#BUDI
ˠ4QSJOHੈ୅ͷόονॲཧϑϨʔϜϫʔΫ
w 4QSJOH#BUDI͔Βͷมߋ఺
ˠ+PC4UFQొ࿥΍%#εΩʔϚɺ
ɹ4QSJOH#PPUར༻࣌ͷ!OBCMF99ʹ஫ҙ
w 4QSJOH#BUDIͷ৽‫ػ‬ೳ
ˠωΠςΟϒαϙʔτɺ0CTFSWBCJMJUZ

More Related Content

What's hot

【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
 

What's hot (20)

さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 

Similar to What's new in Spring Batch 5

Learning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory ForensicsLearning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory Forensics
Vincent Ohprecio
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
Command Prompt., Inc
 
ใบงานที่ 9 16
ใบงานที่ 9 16ใบงานที่ 9 16
ใบงานที่ 9 16
JiiGo Hkn
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shell
ady36
 
Foundation level coaching program
Foundation level coaching programFoundation level coaching program
Foundation level coaching program
Oliver Christen
 

Similar to What's new in Spring Batch 5 (20)

Learning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory ForensicsLearning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory Forensics
 
Class 4 activity
Class 4 activityClass 4 activity
Class 4 activity
 
Team building for #igstartups
Team building for #igstartups Team building for #igstartups
Team building for #igstartups
 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
 
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
忙しい人のためのSphinx 入門 demo
忙しい人のためのSphinx 入門 demo忙しい人のためのSphinx 入門 demo
忙しい人のためのSphinx 入門 demo
 
All links
All linksAll links
All links
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting Started
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?
 
ใบงานที่ 9 16
ใบงานที่ 9 16ใบงานที่ 9 16
ใบงานที่ 9 16
 
What's New in ECMAScript 2015
What's New in ECMAScript 2015What's New in ECMAScript 2015
What's New in ECMAScript 2015
 
Tabuada de-multiplicacao
Tabuada de-multiplicacaoTabuada de-multiplicacao
Tabuada de-multiplicacao
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shell
 
High pr bookmarking site list 2013
High pr bookmarking site list 2013High pr bookmarking site list 2013
High pr bookmarking site list 2013
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
The Fast and The Mobile - Matteo Antony Mistretta & Giada Cazzola - Codemotio...
The Fast and The Mobile - Matteo Antony Mistretta & Giada Cazzola - Codemotio...The Fast and The Mobile - Matteo Antony Mistretta & Giada Cazzola - Codemotio...
The Fast and The Mobile - Matteo Antony Mistretta & Giada Cazzola - Codemotio...
 
Foundation level coaching program
Foundation level coaching programFoundation level coaching program
Foundation level coaching program
 
M11 bagging loo cv
M11 bagging loo cvM11 bagging loo cv
M11 bagging loo cv
 

More from ikeyat

Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
ikeyat
 

More from ikeyat (7)

[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
 
What's New in Spring Boot 2.5
What's New in Spring Boot 2.5What's New in Spring Boot 2.5
What's New in Spring Boot 2.5
 
知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips
 
既存アプリケーションをJava11に対応させる際に 知っておくべきこと
既存アプリケーションをJava11に対応させる際に 知っておくべきこと既存アプリケーションをJava11に対応させる際に 知っておくべきこと
既存アプリケーションをJava11に対応させる際に 知っておくべきこと
 
Spring IO Platform再考
Spring IO Platform再考Spring IO Platform再考
Spring IO Platform再考
 
建築に学ぶマイクロサービス
建築に学ぶマイクロサービス建築に学ぶマイクロサービス
建築に学ぶマイクロサービス
 
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
 

Recently uploaded

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

What's new in Spring Batch 5