Spring Batch Trouble Shoot

꽃봉우리·2024년 8월 9일

Trouble Shoot - Meta Table 자동 생성오류

  batch:
    jdbc:
      initialize-schema: always

yml 파일에 initialize-schema를 always로 해두면 Meta Table이 자동생성 되어야한다.

하지만 테이블을 찾지 못하는 오류가 발생해서 DB를 보면

이렇게 생성이 되지 않는 것을 볼 수 있다.
이러한 문제를 찾아봤는데 Spring Batch 3.0.0 이후 버전에서 생기는 버그라고 많은 사람들이 이와 같은 문제를 겪고 있다는 것을 알 수 있었다.

해결법은 무엇인가?

해결법은 간단하게 쿼리콘솔에 테이블을 생성하는 로직을 직접 실행시키면 된다.
이건 인텔리제이 검색을 활용해서 batch를 실행시키는데 필요한 sql문을 직접 가져오면된다.

이런식으로 찾아서 sql문을 따로 실행시키면 Meta Table이 완성된다.

하지만 이런 방법에는 문제가 있다.

바로 배포할 때 sql문을 계속 넣어줘야한다는 문제가 있다.
이 방법은 매우 귀찮기 때문에 DB를 하나 더 쓰고 자동적으로 채울 수 있게 하는 방법을 택했다.

Flyway 도입

위의 문제 해결방법은 Flyway에서 찾을 수 있었다.
Flyway는 데이터 형성관리 툴로 따로 설정해둔 테이블만 관리를 해주는 툴이다.
이걸 통해서 Meta Table을 자동적으로 만들고 배포까지 실행시킬 수 있다!

  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:/db/migration/sql
    sql-migration-suffixes: sql
    baseline-version: 1

yml 파일에 flyway를 추가해주고

resources 파일 안에 따로 sql 파일을 담는 폴더도 만들어 설정했다.
Flyway 설정을 마치고 돌려보면

batch에 관한 테이블이 생겨났고 flyway스키마를 들어가보면

우리가 따로 만들어둔 sql문을 관리하는 것을 볼 수 있다.

사실 Flyway를 쓰고 바로 해결된 문제는 아니였다. Flyway가 인식이 안되는 문제가 발생했는데 이 문제의 원인은

  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:/db/migration/sql
    sql-migration-suffixes: sql
    baseline-version: 1

경로 설정해두는 곳에서 오타가 났었기 때문이다..

  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:db/migration/sql
    sql-migration-suffixes: sql
    baseline-version: 1

이런식으로 classpath:db로 되어있어서 / 하나 빠져있는걸 발견을 바로 하지 못해서 무슨 문제인지 하면서 10분을 더 할애했다.. 개발을 할 때 오타 하나 때문에 시간을 많이 잡아먹는다고 하였는데 나도 겪게 될 줄이야..ㅠㅠㅠ

이렇게 Batch까지 사용하면서 사용해본 기능들이 하나 둘 늘고 있다~!!

0개의 댓글