๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Batch

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 26์ผ์ฐจ - Spring Batch 8

๐Ÿ“Œ spring-batch 8

โœ”๏ธ JobExecutionListener

  1. ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„
  • implements JobExecutionListner
  • ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ
    • beforeJob(JobExecution)
    • afterJob(JobExecution)
  1. ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ๊ตฌํ˜„
  • @BeforeJob
  • @AfterJob
  • ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ JobExecution์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์Œ

 

โœ”๏ธ ์ •์˜ํ•œ Job ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก

jbf.get("testJob")
    .incrementer()
    .start(testStep())
    .listener(listener1.class)
    .listener(listener2.class)
    .build();

 

โœ”๏ธ StepExecutionListener

  1. ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ๊ตฌํ˜„
  • @BeforeStep
  • @AfterStep
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ StepExecution์„ ๋ฐ›๋Š”๋‹ค.

 

โœ”๏ธ ์ •์˜ํ•œ Step ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก

  • Job ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก๊ณผ ๋™์ผ 
  • sbf.get("testStep")
      ...
      ...
      .listener(listener3.class)
      .build()

 

โœ”๏ธ Skip
step ์ˆ˜ํ–‰ ์ค‘ ๋ฐœ์ƒํ•œ Exception์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ex)

skip(NotFoundNameException.class), skipLimit(3)
  • NotFoundNameException ๋ฐœ์ƒ 3๋ฒˆ๊นŒ์ง€ skip ํ•œ๋‹ค.
    (์„ค์ •ํ•œ Exception์„ n๋ฒˆ๊นŒ์ง€ ํ—ˆ์šฉ)
  • NotFoundNameException ๋ฐœ์ƒ 4๋ฒˆ๋ถ€ํ„ฐ๋Š” ๋ฐฐ์น˜์ž‘์—…์„ ์ค‘๋‹จํ•œ๋‹ค.
    (ํ•ด๋‹น Step์˜ ์ƒํƒœ๋Š” ์‹คํŒจ๋กœ ๋!)
  • ์—๋Ÿฌ ๋ฐœ์ƒ ์ „๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ์ฒ˜๋ฆฌ๋œ ์ƒํƒœ๋กœ ๋‚จ๋Š”๋‹ค.
    (์—๋Ÿฌ ๋ฐœ์ƒ์ „ ๋ฐ์ดํ„ฐ๋Š” ๋กค๋ฐฑ๋˜์ง€ ์•Š๊ณ  ์ •์ƒ์ฒ˜๋ฆฌ ๋จ)

Step์€ chunk 1๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŠธ๋žœ์žญ์…˜์ด ๋™์ž‘ํ•œ๋‹ค.

 

ex) items=100, chunk=10

  • 10๋ฒˆ์งธ chunk์—์„œ Exception์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ 1-9๊นŒ์ง€๋Š” ์ •์ƒ์ฒ˜๋ฆฌ(์ €์žฅ) ํ›„ Job๊ณผ Step์„ FAILED๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋ฐฐ์น˜ ์žฌ์‹คํ–‰์‹œ chunk 10๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ์น˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. (์‹คํŒจ์ฒ˜๋ฆฌ๋œ Job์„ ์žฌ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ)

 

โœ”๏ธ Skip ์˜ˆ์ œ

  1. Person.name์ด empty์ธ ๊ฒฝ์šฐ NotFoundNameException
  2. NotFoundNameException 3๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ step ์‹คํŒจ์ฒ˜๋ฆฌ

์ง€์ •ํ•œ ์˜ˆ์™ธ๋ฐœ์ƒ์— ๋Œ€ํ•œ faultTolerant ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. (skipLimit)

 

โœ”๏ธ faultTolerant

StepBuilderFactory().get("testStep")
    .faultTolerant()
    .skip(NotFoundNameException.class)
    .skilLimit(3)
    .build()

 


๐Ÿ‘  ์ˆ˜๊ฐ•์ธ์ฆ

 

 

ํŒจ์ŠคํŠธ์บ ํผ์Šค [์ง์žฅ์ธ ์‹ค๋ฌด๊ต์œก]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์˜์ƒํŽธ์ง‘, UX/UI, ๋งˆ์ผ€ํŒ…, ๋ฐ์ดํ„ฐ ๋ถ„์„, ์—‘์…€๊ฐ•์˜, The RED, ๊ตญ๋น„์ง€์›, ๊ธฐ์—…๊ต์œก, ์„œ๋น„์Šค ์ œ๊ณต.

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค