【问题标题】:Spring Session table-name property does not change the table nameSpring Session table-name 属性不改变表名
【发布时间】:2019-01-16 00:27:25
【问题描述】:

我必须能够重命名默认 Spring Session 表,并在 spring session documentation 中找到以下配置选项。

spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # 用于初始化数据库模式的 SQL 文件的路径。 spring.session.jdbc.table-name=SPRING_SESSION # 用于存储会话的数据库表的名称。

这是我要在 application.properties 中设置的内容:

spring.session.store-type=jdbc
spring.session.jdbc.table-name: APP_SPR_SESSION
spring.session.jdbc.schema: src/main/resources/appSpringSession.sql

这里是 appSpringSession.sql 的内容,它是 schema-oracle.sql 的修改/重命名版本

CREATE TABLE app_app.APP_SPR_SESSION (
   PRIMARY_ID CHAR(36) NOT NULL,
   SESSION_ID CHAR(36) NOT NULL,
   CREATION_TIME NUMBER(19,0) NOT NULL,
   LAST_ACCESS_TIME NUMBER(19,0) NOT NULL,
   MAX_INACTIVE_INTERVAL NUMBER(10,0) NOT NULL,
   EXPIRY_TIME NUMBER(19,0) NOT NULL,
   PRINCIPAL_NAME VARCHAR2(100 CHAR),
   CONSTRAINT APP_SPR_SESSION_PK PRIMARY KEY (PRIMARY_ID)
);

CREATE UNIQUE INDEX APP_SPR_SESSION_IX1 ON APP_SPR_SESSION (SESSION_ID);
CREATE INDEX APP_SPR_SESSION_IX2 ON APP_SPR_SESSION (EXPIRY_TIME);
CREATE INDEX APP_SPR_SESSION_IX3 ON APP_SPR_SESSION (PRINCIPAL_NAME);

CREATE TABLE app_app.APP_SPR_SESSION_ATTRIBUTES (
    SESSION_PRIMARY_ID CHAR(36) NOT NULL,
    ATTRIBUTE_NAME VARCHAR2(200 CHAR) NOT NULL,
    ATTRIBUTE_BYTES BLOB NOT NULL,
    CONSTRAINT APP_SPR_SESSION_ATTRIBUTES_PK PRIMARY KEY 
    (SESSION_PRIMARY_ID, 
    ATTRIBUTE_NAME),
    CONSTRAINT APP_SPR_SESSION_ATTRIBUTES_FK FOREIGN KEY 
    (SESSION_PRIMARY_ID) 
    REFERENCES APP_SPR_SESSION(PRIMARY_ID) ON DELETE CASCADE
 );

我已使用上述 ddl 手动将表添加到 Oracle 数据库中,并且每次应用启动时它仍在寻找 SPRING_SESSION 表。 似乎指定这些选项没有效果。我从文档中读错了什么?

我也在使用 Spring Session 2.0.2 Release 和 Spring Boot 2.0.1.RELEASE

【问题讨论】:

  • 提供您正在使用的 Spring Boot 和 Spring Session 版本会很有用。另外,您的代码中是否有一些明确的 Spring Session 配置?我主要指的是@EnableJdbcHttpSession的使用。
  • 是的,我有@EnableJdbcHttpSession
  • 只需删除@EnableJdbcHttpSession

标签: spring oracle spring-boot spring-jdbc spring-session


【解决方案1】:

spring.session.* 不适合您的原因是因为您使用的是@EnableJdbcHttpSession。这意味着您正在显式配置 Spring Session,因此 Spring Boot 会退出其自动配置。

您应该删除 @EnableJdbcHttpSession 并确保 Spring Boot 自动配置 Spring Session。此外,您还可以将spring.session.store-type 排除在外,因为只要您在类路径上只有SessionRepository 实现(即您仅依赖于spring-session-jdbc 和没有其他 Spring Session 模块)。

【讨论】:

    【解决方案2】:

    你也可以使用@EnableJdbcHttpSession(tableName = "APP_SPR_SESSION")

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多