[Spring Batch] Job ์‹คํ–‰ ํ”„๋กœํผํ‹ฐ, JobParameter, Scope

2024. 8. 26. 17:10ยท๐Ÿ“‚ backend/spring

Job ์‹คํ–‰ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ

  1. spring.batch.job.enabled : application context ์— ๋“ฑ๋ก๋œ Job ์„ ์‹คํ–‰์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ
    1. true (default) : Job ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ™œ์„ฑํ™” / false : ๋ชจ๋“  Job ์„ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •
  2. spring.batch.job.name : ์‹คํ–‰ํ•  ๋ฐฐ์น˜ Job ์„ job name ์„ ๊ธฐ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ์–ธ
    1. spring.batch.job.name=
      • ๊ฐ’์ด ์—†์œผ๋ฉด ๋ชจ๋“  ์žก์„ ์‹คํ–‰ (spring batch 5.x ๋ถ€ํ„ฐ exception ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ.)
    2. spring.batch.job.name=jobName1
      • jobName1 ์ด๋ฆ„์˜ ์žก๋งŒ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
    3. spring.batch.job.name=jobName1,jobName2
      • spring batch 4.x : ํ•ด๋‹น job name ์˜ multiple batch job ์„ ์‹คํ–‰
      • spring batch 5.x : multiple batch job ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•„ IllegalArgumentException ๋ฐœ์ƒ
    4. spring.batch.job.name=${job.name:NONE}
      1. spring.batch.job.name ์— ๊ฐ’์ด ์—†์œผ๋ฉด ๋ชจ๋“  ์žก ์‹คํ–‰
      2. ${job.name:NONE} : job.name ์ด ์กด์žฌํ•˜๋ฉด ํŠน์ • ์žก๋งŒ ์‹คํ–‰ํ•˜๊ณ , job.name ์— ๊ฐ’์ด ์—†์œผ๋ฉด ์‹คํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ์„ค์ •

 

Spring Batch Job test argument ์„ค์ • ๋ฐฉ๋ฒ•

  • @SpringBootTest ์˜ args option ํ™œ์šฉ
@SpringBatchTest
@SpringBootTest(args = "--job.name=memberDeleteJob")
public class MemberBatchTest {

	@Autowired
	private JobLauncherTestUtils jobLauncherTestUtils;

	@Autowired
	private JobRepositoryTestUtils jobRepositoryTestUtils;

	@AfterEach
	public void cleanUp() {
		jobRepositoryTestUtils.removeJobExecutions();
	}

	@Test
	public void testJob(@Autowired @Qualifier("memberDeleteJob") Job job) throws Exception {
		this.jobLauncherTestUtils.setJob(job);
		JobExecution jobExecution = jobLauncherTestUtils.launchJob();

		Assertions.assertThat(jobExecution.getExitStatus().getExitCode()).isEqualTo(ExitStatus.COMPLETED.getExitCode());
	}

}

 

@JobScope, @StepScope

  1. Scope
    1. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์ด ๊ด€๋ฆฌ๋˜๋Š” ๋ฒ”์œ„
    2. singleton, prototype, request, sessino, application ์ด ์กด์žฌํ•˜๋ฉฐ ๊ธฐ๋ณธ์€ singleton.
  2. @JobScope , @StepScope
    1. Job ๊ณผ Step ์˜ ๋นˆ ์ƒ์„ฑ๊ณผ ์‹คํ–‰์— ๊ด€์—ฌํ•˜๋Š” ์Šค์ฝ”ํ”„
    2. proxy ๋ชจ๋“œ๋กœ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ํ•˜๋Š” ์Šค์ฝ”ํ”„
  3. @JobScope
    • Step ์„ ์–ธ๋ฌธ์— ์ •์˜ํ•œ๋‹ค.
    • @Value : jobParameter, jobExecutionContext ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. @StepScope
    • Tasklet ์ด๋‚˜ ItemReader, ItemWriter, ItemProcessor ์„ ์–ธ๋ฌธ์— ์ •์˜ํ•œ๋‹ค.
    • @Value : jobParameter, jobExecutionContext, stepExecutionContext ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

Reference

  1. spring batch ํŠน์ •
    • https://docs.spring.io/spring-boot/how-to/batch.html#howto.batch.running-jobs-on-startup
    • https://github.com/spring-projects/spring-boot/blob/v3.3.3/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.java
  2. spring.batch.job.name
    • https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#multiple-batch-jobs
  3. spring batch test
    • https://www.baeldung.com/spring-batch-testing-job
    • https://docs.spring.io/spring-batch/reference/testing.html

 

 

'๐Ÿ“‚ backend > spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[kurly tech blog] Redisson, Spring AOP ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ๋ฝ ์ ์šฉ ๋ฐฉ๋ฒ• summary  (0) 2024.11.26
Spring Batch ๊ธฐ๋ฐ˜ ํšŒ์› ์‚ญ์ œ ๋ฐฐ์น˜ ์‚ฝ์งˆ ๊ธฐ๋ก  (0) 2024.09.03
Spring Batch Architecture  (0) 2024.05.10
hibernate.query.in_clause_parameter_padding = true ?  (1) 2024.03.06
JPA ์— UUID version 7 ์ ์šฉํ•˜๊ธฐ  (0) 2024.03.04
'๐Ÿ“‚ backend/spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [kurly tech blog] Redisson, Spring AOP ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ๋ฝ ์ ์šฉ ๋ฐฉ๋ฒ• summary
  • Spring Batch ๊ธฐ๋ฐ˜ ํšŒ์› ์‚ญ์ œ ๋ฐฐ์น˜ ์‚ฝ์งˆ ๊ธฐ๋ก
  • Spring Batch Architecture
  • hibernate.query.in_clause_parameter_padding = true ?
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    JPA
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    spring-batch
    spring camp 2025
    spring
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    UUID
    spring AOP
    kafka
    nGrinder
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    mysql
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    AWS
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    ํšŒ๊ณ 
    Redisson
    ๋™์‹œ์„ฑ
    react
    gof
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
[Spring Batch] Job ์‹คํ–‰ ํ”„๋กœํผํ‹ฐ, JobParameter, Scope
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”