• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

DuplicateKeyException이 발생합니다.

21.12.14 00:50 작성 조회수 3.94k

0

한번 실행하고 나서 두번째 시도시 아래와 같이 키중복 발생합니다.
 
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해주고 했음에도 불구하고 동일합니다 ...
 
 

답변 2

·

답변을 작성해보세요.

1

네 감사합니다

시퀀스를 수동으로 넣어야 하는 DB 일 경우 위와 같이 삭제했을 경우 다시 입력해 주어야 합니다

Postgresql 같은 경우 위와 같은 처리가 필요하지 않습니니다

 

backsl님의 프로필

backsl

질문자

2021.12.15

수업내용은 mysql 이어서 진행하다보니, 위와 같은 이슈가 있었네요.

Postgresql는 참고 하겠습니다.

 

혹시 아래의 어노테이션 넣는 경우 넣는 사례가 있을까요? 구글링에서는 배치 실행방법을 조금 조작하는 방법이 

나와있는데 굳이 필요한가 의문이 듭니다. (이번 실습에서는 시도만 해보고 적용하진 않았습니다)

@EnableAutoConfiguration(exclude={BatchAutoConfiguration.class})

 

감사합니다.

0

backsl님의 프로필

backsl

질문자

2021.12.15

아래와 같이 시도하면 정상적으로 됩니다. 다른분들도 참고 하시길 바랍니다.

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');