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 테이블이 어떤 역할을 하는지 몰라 위 의존성은 주석처리 해서 문제를 해결했다.

+ Recent posts