Spring Session table-name 属性不改变表名

MrD*_*iel 4 oracle spring spring-jdbc spring-boot spring-session

我必须能够重命名默认的 Spring Session 表,并在spring 会话文档中找到以下配置选项。

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
Run Code Online (Sandbox Code Playgroud)

以下是 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
 );
Run Code Online (Sandbox Code Playgroud)

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

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

Ved*_*vic 5

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

您应该删除@EnableJdbcHttpSession并确保 Spring Boot 自动配置 Spring Session。此外,您也可以省略spring.session.store-type,因为只要您SessionRepository在类路径上只有实现(即您仅依赖于spring-session-jdbc而不依赖于其他 Spring Session 模块),Spring Boot 就应该能够推断出您正在使用哪个会话存储库实现。