본문 바로가기

STUDY/Spring

Spring Boot | spring-session-jdbc 테이블 생성이 안 될 때..

  • Gradle 7.0.2
  • Java 11
  • Spring Boot 2.5.0
  • H2 Database

build.gradle

spring-session-jdbc는 세션을 데이터베이스에 저장하도록 한다.

implementation 'org.springframework.session:spring-session-jdbc'

application.yml

spring.session.stor-type= jdbc로 설정해주어야 한다. 이렇게 하면 프로젝트를 실행할 때 SPRING_SESSION테이블과 SPRING_SESSION_ATTRIBUTES테이블이 자동으로 생성된다.

spring:
    session:
        store-type: jdbc

하지만..?

아무리해도 자동으로 생성되지 않았음.. spring.session.jdbc.initialize-schema= always로 설정해주니 생성됐다.

spring:
  session:
    store-type: jdbc
    jdbc.initialize-schema: always

만약.. 그래도 안 된다면?

수동..생성하자..

CREATE TABLE SPRING_SESSION (
    PRIMARY_ID CHAR(36) NOT NULL,
    SESSION_ID CHAR(36) NOT NULL,
    CREATION_TIME BIGINT NOT NULL,
    LAST_ACCESS_TIME BIGINT NOT NULL,
    MAX_INACTIVE_INTERVAL INT NOT NULL,
    EXPIRY_TIME BIGINT NOT NULL,
    PRINCIPAL_NAME VARCHAR(100),
    CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
);

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES (
    SESSION_PRIMARY_ID CHAR(36) NOT NULL,
    ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
    ATTRIBUTE_BYTES LONGVARBINARY NOT NULL,
    CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
    CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
);