Spring

Spring batch BadSqlGrammarException

leeheefull 2022. 6. 21. 22:21

Description

  • 스프링 배치를 처음 실행하려고 하면 BadSqlGrammarException 에러가 발생하는 현상이 있습니다.

Error message

java.lang.IllegalStateException: Failed to execute ApplicationRunner
...
...
...
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is java.sql.SQLSyntaxErrorException: Table 'batch_test.batch_job_instance' doesn't exist
...
...
...
Caused by: java.sql.SQLSyntaxErrorException: Table 'batch_test.batch_job_instance' doesn't exist
...
...
...

Solution

에러 메시지를 보면 테이블 스키마가 존재하지 않는다는 내용입니다. 스프링 배치는 수행한 내용을 메타 데이터로 남겨서 테이블에 저장합니다. 하지만, 스프링 2.X 버전에서는 테이블 스키마를 생성해주지 않기 때문에 발생하게 된 겁니다.

application.yml 또는 application.properties에 배치 초기 스키마를 설정해주면 됩니다. spring.batch.jdbc.initialize-schema=always를 추가해 줍니다. 

설정 파일에 추가해도 되지만, 아래처럼 직접 schema-mysql.sql을 찾아서 실행해도 됩니다.

schema-mysql.sql

schema-mysql.sql

Conclusion

application.yml

application.yml 

application.properties

application.properties 

자동으로 생성된 배치 관련 테이블

자동으로 생성된 배치 관련 테이블 

Reference