如何在Spring-Sessiona JDBC中初始化架构

时间:2018-12-17 21:22:43

标签: java spring hibernate spring-boot spring-session

我正在将Spring Boot 2.0.x,Hibernate和Spring Session Jdbc与Mysql 5.7一起使用。 我在开发环境下工作,因此将Hibernate配置为每次都生成架构:

<style>
  @import url('https://fonts.googleapis.com/css?family=Roboto');
</style>

它工作正常,但是我在Spring Session上遇到了问题... 我尝试设置spring.jpa.hibernate.ddl-auto=create-drop ,但不起作用。

initialize-schema

是否可以自动生成完整的架构(所有实体和SPRING_SESSION)?

它不适用于MySQL和H2(我尝试过spring.session.jdbc.initialize-schema=always 选项)

2 个答案:

答案 0 :(得分:0)

我正在描述这些步骤。它对我有用。

1-将依赖性添加到pom文件中。

<dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-jdbc</artifactId>
    </dependency>

2-将具有相同路径和名称的sql文件添加到项目中的“资源”文件下。

PATH:/org/springframework/session/jdbc/schema-mysql.sql

schema-mysql.sql

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)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

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 BLOB 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
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

我从spring github官方帐户获得了sql文件。

https://github.com/spring-projects/spring-session/blob/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc/schema-mysql.sql

3-将以下属性添加到application.properties

spring.session.jdbc.initialize-schema=always
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-mysql.sql

如果它不再起作用,请告诉我。就像我说的那样,它对我有用。 enter image description here

答案 1 :(得分:0)

application.properties

中尝试此设置
spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=always //spring will create required tables for us
spring.session.timeout.seconds=900