更新时间: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.