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

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装Masatoshi Tada
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Ryosuke Uchitate
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門tsukasamannen
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 

What's hot (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 

Similar to Spring Batch Document

Learning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory ForensicsLearning iPython Notebook Volatility Memory Forensics
Learning iPython Notebook Volatility Memory ForensicsVincent Ohprecio
 
Team building for #igstartups
Team building for #igstartups Team building for #igstartups
Team building for #igstartups TshirtAbout.Me
 
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 SpringTakashi Yamamoto
 
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話
フロントエンド初心者の大学生が Scala.js で Web アプリを作ってみた話Yosuke Mizutani
 
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 PostgreSQLCommand Prompt., Inc
 
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 PostgreSQLMark Wong
 
忙しい人のためのSphinx 入門 demo
忙しい人のためのSphinx 入門 demo忙しい人のためのSphinx 入門 demo
忙しい人のためのSphinx 入門 demoFumihito Yokoyama
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedBrendan Gregg
 
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?Fátima Casaú Pérez
 
ใบงานที่ 9 16
ใบงานที่ 9 16ใบงานที่ 9 16
ใบงานที่ 9 16JiiGo Hkn
 
What's New in ECMAScript 2015
What's New in ECMAScript 2015What's New in ECMAScript 2015
What's New in ECMAScript 2015Sasha dos Santos
 
Tabuada de-multiplicacao
Tabuada de-multiplicacaoTabuada de-multiplicacao
Tabuada de-multiplicacaolisitk
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shellady36
 
High pr bookmarking site list 2013
High pr bookmarking site list 2013High pr bookmarking site list 2013
High pr bookmarking site list 2013SEO DON
 
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 PostgreSQLMark Wong
 
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...Codemotion
 
M11 bagging loo cv
M11 bagging loo cvM11 bagging loo cv
M11 bagging loo cvRaman Kannan
 
Python Developer's Daily Routine
Python Developer's Daily RoutinePython Developer's Daily Routine
Python Developer's Daily RoutineMaxim Avanov
 

Similar to Spring Batch Document (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...
 
M11 bagging loo cv
M11 bagging loo cvM11 bagging loo cv
M11 bagging loo cv
 
Python Developer's Daily Routine
Python Developer's Daily RoutinePython Developer's Daily Routine
Python Developer's Daily Routine
 

More from ikeyat

[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性ikeyat
 
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.5ikeyat
 
知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tips知っておきたいSpring Batch Tips
知っておきたいSpring Batch Tipsikeyat
 
既存アプリケーションをJava11に対応させる際に 知っておくべきこと
既存アプリケーションをJava11に対応させる際に 知っておくべきこと既存アプリケーションをJava11に対応させる際に 知っておくべきこと
既存アプリケーションをJava11に対応させる際に 知っておくべきことikeyat
 
Spring IO Platform再考
Spring IO Platform再考Spring IO Platform再考
Spring IO Platform再考ikeyat
 
建築に学ぶマイクロサービス
建築に学ぶマイクロサービス建築に学ぶマイクロサービス
建築に学ぶマイクロサービス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_studyikeyat
 

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

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdfSteve Caron
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flinkconfluent
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...Piyovi
 
Key Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapKey Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapIshara Amarasekera
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...OnePlan Solutions
 
OpenMetadata Community Meeting - 4th April, 2024
OpenMetadata Community Meeting - 4th April, 2024OpenMetadata Community Meeting - 4th April, 2024
OpenMetadata Community Meeting - 4th April, 2024OpenMetadata
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
What is Mendix and the concept of low-code development.docx
What is Mendix and the concept of low-code development.docxWhat is Mendix and the concept of low-code development.docx
What is Mendix and the concept of low-code development.docxTechnogeeks
 
The State of the Green IT at the beginning of 2024
The State of the Green IT at the beginning of 2024The State of the Green IT at the beginning of 2024
The State of the Green IT at the beginning of 2024Artur Skowroński
 
Business Analyzopedia - Your Pocket Gita for Business Analysis
Business Analyzopedia - Your Pocket Gita for Business AnalysisBusiness Analyzopedia - Your Pocket Gita for Business Analysis
Business Analyzopedia - Your Pocket Gita for Business AnalysisDEEPRAJ PATHAK
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxSasikiranMarri
 
Revolutionize Your Video Editing with InVideo.io: A Comprehensive Review
Revolutionize Your Video Editing with InVideo.io: A Comprehensive ReviewRevolutionize Your Video Editing with InVideo.io: A Comprehensive Review
Revolutionize Your Video Editing with InVideo.io: A Comprehensive Reviewjw364beach
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxAS Design & AST.
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
logical backup of Oracle Datapump-detailed.pptx
logical backup of Oracle Datapump-detailed.pptxlogical backup of Oracle Datapump-detailed.pptx
logical backup of Oracle Datapump-detailed.pptxRemote DBA Services
 

Recently uploaded (20)

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flink
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...
Explore the Three Main Types of Logistics - Inbound Logistics, Outbound Logis...
 
Key Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapKey Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery Roadmap
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...
Transform your Corporate Strategy Office - Harness OnePlan’s Strategic Portfo...
 
OpenMetadata Community Meeting - 4th April, 2024
OpenMetadata Community Meeting - 4th April, 2024OpenMetadata Community Meeting - 4th April, 2024
OpenMetadata Community Meeting - 4th April, 2024
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
What is Mendix and the concept of low-code development.docx
What is Mendix and the concept of low-code development.docxWhat is Mendix and the concept of low-code development.docx
What is Mendix and the concept of low-code development.docx
 
The State of the Green IT at the beginning of 2024
The State of the Green IT at the beginning of 2024The State of the Green IT at the beginning of 2024
The State of the Green IT at the beginning of 2024
 
Business Analyzopedia - Your Pocket Gita for Business Analysis
Business Analyzopedia - Your Pocket Gita for Business AnalysisBusiness Analyzopedia - Your Pocket Gita for Business Analysis
Business Analyzopedia - Your Pocket Gita for Business Analysis
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
 
Revolutionize Your Video Editing with InVideo.io: A Comprehensive Review
Revolutionize Your Video Editing with InVideo.io: A Comprehensive ReviewRevolutionize Your Video Editing with InVideo.io: A Comprehensive Review
Revolutionize Your Video Editing with InVideo.io: A Comprehensive Review
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptx
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
logical backup of Oracle Datapump-detailed.pptx
logical backup of Oracle Datapump-detailed.pptxlogical backup of Oracle Datapump-detailed.pptx
logical backup of Oracle Datapump-detailed.pptx
 

Spring Batch Document