on
[SPRING] 스프링 배치 테이블 초기화 방법
[SPRING] 스프링 배치 테이블 초기화 방법
728x90
아래와 같이 초기화를 돌리고 다음과 같은 이슈를 발생하였다.
@Configuration @RequiredArgsConstructor public class jobBatchResetTest { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job job() { return jobBuilderFactory.get("batchJob1") .incrementer(new RunIdIncrementer()) // 동일 파라미터인데 다시 실행하고 싶을때 사용하라는 의미로 RunIdIncrementer를 제공 .start(step1()) .next(step2()) .build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { System.out.println("step1 was executed"); return RepeatStatus.FINISHED; } }) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { System.out.println("step2 was executed"); return RepeatStatus.FINISHED; } }) .build(); } }
org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [INSERT into BATCH_STEP_EXECUTION(STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, COMMIT_COUNT, READ_COUNT, FILTER_COUNT, WRITE_COUNT, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT, PROCESS_SKIP_COUNT, ROLLBACK_COUNT, LAST_UPDATED) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; Duplicate entry '0' for key 'BATCH_STEP_EXECUTION.PRIMARY'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'BATCH_STEP_EXECUTION.PRIMARY'
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'BATCH_STEP_EXECUTION.PRIMARY'
개선책으로는 아래와 같이 해봤는데도 실패....
1. @SpringBootApplication 주석 후 아래와 같이 진행
@EnableAutoConfiguration(exclude={BatchAutoConfiguration.class})
2. @SpringBootApplication(exclude={BatchAutoConfiguration.class})
결국은 테이블만 날리는것이 아닌 시퀀스들도 초기화를 해주고나서 가능해졌다.
delete from BATCH_JOB_EXECUTION_CONTEXT; delete from BATCH_JOB_EXECUTION_PARAMS; delete from BATCH_JOB_EXECUTION_SEQ; delete from BATCH_JOB_SEQ; delete from BATCH_STEP_EXECUTION_CONTEXT; delete from BATCH_STEP_EXECUTION_SEQ; delete from BATCH_STEP_EXECUTION; delete from BATCH_JOB_EXECUTION; delete from BATCH_JOB_INSTANCE; INSERT INTO BATCH_STEP_EXECUTION_SEQ values(0, '0'); INSERT INTO BATCH_JOB_EXECUTION_SEQ values(0, '0'); INSERT INTO BATCH_JOB_SEQ values(0, '0');
728x90
from http://prodo-developer.tistory.com/172 by ccl(A) rewrite - 2021-12-15 01:01:42