스프링 배치를 실행하는데 있어서 기본적으로 메타데이터 테이블이 필요하다. 다음은 스프링배치 5.1.1 기준 필요한 메타데이터 테이블이다.
없을 경우 다음과 같은 오류가 난다.
`PreparedStatementCallback; bad SQL grammar [~이하생략~]; nested exception is java.sql.SQLSyntaxErrorException: Table `프로젝트나 테이블이름.BATCH_JOB_INSTANCE' doesn't exist
테이블을 생성하는 방식은 크게 자동/수동 2가지의 방법이 있다.
1.자동으로 테이블을 생성하는 경우
application.properties파일에 다음과 같이 설정해주면 되는데 이러면 메타데이터 테이블을 스프링부트가 시작할 때 자동으로 생성한다. 하지만 단. 내장 데이터베이스를 사용할 때에 한해서 이다.
spring.batch.jdbc.initialize-schema=always
즉 mysql같은 외부 db를 사용하게 되면 위의 명령어로 메타데이터 테이블이 생성되지 않고 오류가 날 것이다.
이러면 해당 테이블들을 수동으로 생성해줘야 한다.
2.수동으로 테이블을 생성하는 경우
필자는 인텔리제이를 사용하고 있기에 인텔리제이 기준에서 스프링배치와 mysql을 연결하는 경우(미리 mysql db랑 연결 해놓았다고 가정)를 설명한다.
우선 왼쪽의 프로젝트경로에서 `External Libraries`의 목록을 열고 batch core 라고 키보드를 입력하여 배치코어를 찾는다.
인텔리제이의 오른쪽의 데이터베이스를 클릭하고, db를 오른쪽마우스로 클릭하여서 > Navigation 항목에서 > Jump to Query Console > New Query Console 을 항목을 선택
위와 같이하면 나오는 창에 아까 우리가 복사한 메타데이터 테이블의 SQL문을 복사해서 붙여넣고 실행하면 db에 직접 접속하지 않고, 인텔리제이에서 테이블을 생성 가능하다.
이렇게 하고 다시 배치를 실행하면 정상적으로 동작할 것이다.
'Spring & Boot' 카테고리의 다른 글
Bean 생애주기 간단정리 (0) | 2024.11.24 |
---|---|
DispatcherServlet 디스패처서블릿 (0) | 2024.11.20 |
@PathVariable, @RequestParam (0) | 2024.04.20 |
@Configuration @Bean 수동등록 (0) | 2024.03.31 |
컴포넌트스캔 @Autowired (0) | 2024.03.30 |