SlideShare ist ein Scribd-Unternehmen logo
1 von 85
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)NTT DATA Technology & Innovation
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Toshiaki Maki
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Batchは作ったことあるけど、 初めてSpring Batchを使ってみた
Batchは作ったことあるけど、 初めてSpring Batchを使ってみたBatchは作ったことあるけど、 初めてSpring Batchを使ってみた
Batchは作ったことあるけど、 初めてSpring Batchを使ってみたHideyuki SASAKURA
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 

Was ist angesagt? (20)

とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Batchは作ったことあるけど、 初めてSpring Batchを使ってみた
Batchは作ったことあるけど、 初めてSpring Batchを使ってみたBatchは作ったことあるけど、 初めてSpring Batchを使ってみた
Batchは作ったことあるけど、 初めてSpring Batchを使ってみた
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 

Ähnlich wie 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
 
Foundation level coaching program
Foundation level coaching programFoundation level coaching program
Foundation level coaching programOliver Christen
 
M11 bagging loo cv
M11 bagging loo cvM11 bagging loo cv
M11 bagging loo cvRaman Kannan
 

Ähnlich wie 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...
 
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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 

Kürzlich hochgeladen (20)

Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 

Spring Batch Document