spring/batch

#4. Step

tokkaiiii 2025. 4. 17. 08:43

1. flow

Job 에서 step 을 실행하면 StepBuild.class 에서 TaskletStep 을 만드는 메소드를 탄다

public TaskletStepBuilder tasklet(Tasklet tasklet, PlatformTransactionManager transactionManager) {
		return new TaskletStepBuilder(this).tasklet(tasklet, transactionManager);
	}

그리고 TaskletStepBuilder 클래스의 메소드를 타고

	public TaskletStepBuilder tasklet(Tasklet tasklet, PlatformTransactionManager transactionManager) {
		this.tasklet = tasklet;
		super.transactionManager(transactionManager);
		return this;
	}

build 를 하면

AbstractTaskletStepBuilder 클래스의 build 함수를 통해 빌드된다

public TaskletStep build() {

		registerStepListenerAsChunkListener();

		TaskletStep step = new TaskletStep(getName());

		super.enhance(step);

		step.setChunkListeners(chunkListeners.toArray(new ChunkListener[0]));

		if (this.transactionManager != null) {
			step.setTransactionManager(this.transactionManager);
		}

		if (transactionAttribute != null) {
			step.setTransactionAttribute(transactionAttribute);
		}

		if (stepOperations == null) {

			stepOperations = new RepeatTemplate();

			if (taskExecutor != null) {
				TaskExecutorRepeatTemplate repeatTemplate = new TaskExecutorRepeatTemplate();
				repeatTemplate.setTaskExecutor(taskExecutor);
				repeatTemplate.setThrottleLimit(throttleLimit);
				stepOperations = repeatTemplate;
			}

			((RepeatTemplate) stepOperations).setExceptionHandler(exceptionHandler);

		}
		step.setStepOperations(stepOperations);
		step.setTasklet(createTasklet());

		step.setStreams(streams.toArray(new ItemStream[0]));

		try {
			step.afterPropertiesSet();
		}
		catch (Exception e) {
			throw new StepBuilderException(e);
		}

		return step;

	}
	@Override
	protected Tasklet createTasklet() {
		return tasklet;
	}

 

SimpleJobBuilder 에서 build 메서드 실행

	public Job build() {
		if (builder != null) {
			return builder.end().build();
		}
		SimpleJob job = new SimpleJob(getName());
		super.enhance(job);
		job.setSteps(steps);
		try {
			job.afterPropertiesSet();
		}
		catch (Exception e) {
			throw new JobBuilderException(e);
		}
		return job;
	}