23.07.29 00:02 작성
·
754
0
@Configuration
@RequiredArgsConstructor
@Slf4j
public class HelloWorldJdbcConfig {
private final JobBuilderFactory jobBuilderFactory; //이걸 통해 JOb을 생성
private final StepBuilderFactory stepBuilderFactory; //Step 생성을 위해
/**
* 두 객체를 활용하여 Job과 Step을 생성할꺼야
Job은 JobBuilderFactory로 만들고
Step은 StepBuilderFactory로 만들자.
*/
@Bean
public Job helloWorldJob() {
Job helloWorldJob = jobBuilderFactory.get("helloWorldJob") //이름을 정해주고
.incrementer(new RunIdIncrementer()) //Job을 실행할 때 id를 부여하는데, Sequence를 순차적으로 부여할 수 있도록 RunIdIncrementer를 해주자.
.start(helloWorldStep()) //Job안에는 Step이 존재해야해.
.build();
return helloWorldJob;
}
@JobScope
@Bean
public Step helloWorldStep() {
TaskletStep helloWorldStep = stepBuilderFactory.get("helloWorldStep") //역시 똑같이 get을 통해 이름 명시
.tasklet(helloWorldTasklet()) //일단 간단하게 taskLet으로 해보자.
.build();
return helloWorldStep;
}
@StepScope //step 하위에서 실행되기 때문에 @StepScope를 등록하자.
@Bean
public Tasklet helloWorldTasklet() {
//Tasklet은 그냥 만들면 돼
Tasklet tasklet = new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
//내가 원하는 작업 부분
System.out.println("Hello World Spring Batch");
log.info("asdasdasd");
log.info("batch start!!");
//원하는 작업이 끝난 이후 어떻게 할 것인가 ?에 대한 Status를 명시해야함.
return RepeatStatus.FINISHED; // FINISHED를 명시함으로써 이 Step을 끝낸다는 뜻.
}
};
return tasklet;
}
/**
* 위 과정을 모두 다 했다면
* HelloWorld를 보기 위한 하나의 Job이 완성이 된 것이다 !
* 스프링을 실행해서 출력이 되는지 확인하자 !!
* Job을 실행시킬 때는 properties에서 설정한 batch.job.names를 파라미터로 넘겨주어야 Job이 실행이 된다.
* 위에서 Job 이름은 helloWorldJob이기 때문에 파라미터로 넣어주자 !
*Edit Configurations > Program Parameters에 --spring.batch.job.names=helloWorldJob을 넣어주자.
* 그러고 실행하면 돼 !
*/
/**
* 또한 Job을 실행할 때는
* apllication.properties에 설정한
* spring.batch.job.names에 파라미터로 넘겨주어야 job이 실행이 된다.
* --spring.batch.job.names={이름} 이런 식으로 넘겨줘야해
* 내가 현재 설정한 job의 이름은 helloWorldJob이기 때문에 해당 값을 넣어서 파라미터 등록하자.
*/
}
위 코드를 작성한 후에 main에서 @EnableBatchProcessing 어노테이션을 추가해주고 실행하였습니다.
또한 application.properties에 spring.batch.job.names=${job.name:NONE}
넣어준 후 parameter 까지 제대로 넣어주었는데 실행하면 해당 출력문이 나오지 않습니다.. 뭐가 문제인지 몰라서 질문드립니다.. !
답변 2
0
2023. 07. 30. 21:44
해당 코드를 내려 받고 로컬에서 실행을 해보았습니다 :)
아래 코드[0]를 주석처리나 삭제를 하신 다음에 실행을 하시면 정상적으로 동작을 하겠습니다.
spring.batch.job.enabled=false
위의 코드는 주로 스케쥴링을 통해서 구동을 할 때 사용을 하게 되겠습니다. 현재 학습 앞부분에서의 스프링 배치를 구동할 때는 위의 코드를 세팅하지 않는데요. 위의 코드는 스케쥴링 부분 강의에서 세팅을 하겠습니다.
내용 참고 부탁드리겠습니다.
감사합니다 :)
[0]
0
2023. 07. 29. 01:00
안녕하세요 :)
해당 코드 스니펫으로는 확인하기가 어려움이 있습니다 😢 혹시 전체 코드를 돌려 볼 수 있도록 github 링크를 받아 볼 수 있을까요?
2023. 07. 29. 23:28
https://github.com/HyunSoo730/spring-batch-tutorials
https://github.com/HyunSoo730/spring-batch-tutorials.git
여기 깃허브 주소입니다.. !! 혹시 스프링부트 5.x 버전이라 그런건지... 잘 모르겠습니다 ㅠㅠ 바쁘신 와중에 빠르게 답변 주셔서 감사합니다 !!
2023. 07. 30. 12:16
아 그리고 제 버전은
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.14'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '11'
}
이렇게 실행했는데 되지 않습니다...
2023. 07. 31. 14:53
와 정말 감사합니다.. ㅠㅠ 왜 안되나 했는데 드디어 해결했습니다. 열심히 강의 수강하겠습니다 !!