且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'test.spring_session'不存在 - Spring Boot

更新时间:2023-10-11 08:10:22

我刚刚在将 spring-boot 2.0.5(与 OP 使用的 1.4.0 相对)与 Postgres 驱动程序一起使用时遇到了一个非常相似的错误:

I've just had a quite similar error while using spring-boot 2.0.5 (as opposed to 1.4.0 used by OP) with Postgres driver:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM spring_sessions WHERE EXPIRY_TIME < ?]; nested exception is org.postgresql.u
til.PSQLException: ERROR: relation "spring_sessions" does not exist
  Position: 13
        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234) ~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEA
SE]
        // redacted...
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
Caused by: org.postgresql.util.PSQLException: ERROR: relation "spring_sessions" does not exist
  Position: 13
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433) ~[postgresql-42.2.2.jar!/:42.2.2]
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178) ~[postgresql-42.2.2.jar!/:42.2.2]
        // redacted...
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:605) ~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
        ... 16 common frames omitted

根据文档,设置由关系数据库支持的 Spring Session 就像向您的 application.properties单个配置属性一样简单/代码>:

According to documentation, setting up Spring Session backed by a relational database is as simple as adding a single configuration property to your application.properties:

spring.session.store-type=jdbc

请注意,为了自动创建会话表,我还必须指定:

Note that in order to get the session tables auto-created, I had to also specify:

spring.session.jdbc.initialize-schema=always

一旦指定了这个设置,Spring 就会使用 spring-session-jdbc jar 中正确的 SQL 初始化脚本.我的错误是没有指定该选项 - 在这种情况下 embedded 被用作默认值.

Once this setting specified, Spring used the correct SQL initialization script from spring-session-jdbc jar. My mistake was not specifying that option - in which case embedded was being used as default value.