org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION
WHERE EXPIRY_TIME < ?
]
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:244) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:102) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1548) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:688) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:965) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1009) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1019) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.lambda$cleanUpExpiredSessions$8(JdbcIndexedSessionRepository.java:649) ~[spring-session-jdbc-4.0.1.jar:4.0.1]
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) ~[spring-tx-7.0.2.jar:7.0.2]
at org.springframework.session.jdbc.JdbcIndexedSessionRepository.cleanUpExpiredSessions(JdbcIndexedSessionRepository.java:648) ~[spring-session-jdbc-4.0.1.jar:4.0.1]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-7.0.2.jar:7.0.2]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:94) ~[spring-context-7.0.2.jar:7.0.2]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.sql.SQLSyntaxErrorException: Table 'bootex.spring_session' doesn't exist
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:988) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1166) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1101) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1448) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1084) ~[mysql-connector-j-9.5.0.jar:9.5.0]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-7.0.2.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-7.0.2.jar:na]
at org.springframework.jdbc.core.JdbcTemplate.lambda$update$0(JdbcTemplate.java:970) ~[spring-jdbc-7.0.2.jar:7.0.2]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:669) ~[spring-jdbc-7.0.2.jar:7.0.2]
... 14 common frames omitted
jdbc를 이용해서 테이블을 다시 생성하는데 Table 'bootex.spring_session'이 없는데 해당 테이블을 DELETE하려고 시도하니까 자꾸 에러가 발생한다. jdbc가 테이블을 자동으로 생성하고, 삭제하다 보니까 위와 같은 에러가 발생해도 어디서 잘못되었는지 알지 못한다.
implementation 'org.springframework.boot:spring-boot-starter-session-jdbc'
testImplementation 'org.springframework.boot:spring-boot-starter-session-jdbc-test'
build.gradle을 보면 해당 의존성이 추가되었는데, 해당 의존성은 spring session이 DB에 자동 저장되게끔 설정해서, 애플리케이션이 동작할 때마다 spring_session 테이블을 찾는다.
현재는 위 의존성과, spring session 테이블이 어떤 역할을 하는지 몰라 위 의존성은 주석처리 해서 문제를 해결했다.
'Spring' 카테고리의 다른 글
| 스프링 부트 단독으로 실행 가능한 파일로 만들기 (0) | 2025.12.26 |
|---|---|
| @PostConstruct로 알아보는 스프링 생명주기, @Autowired 사용 안하는 이유 (0) | 2025.12.18 |
| com.example.demo 패키지 구조 왜 이렇게 만들어 질까? (0) | 2025.12.12 |
| [Spring Security] BCryptPasswordEncoder 암호화된 비밀번호 검증 어떻게 할까? (0) | 2024.11.21 |
| [Spring] 프론트엔드에서 값 입력 누락 시, 백엔드 데이터 JSON 처리 어떻게 될까? + null 값에 .equals() 사용시 에러(24/11/09 수정) (0) | 2024.11.05 |