Как автоматически инициализировать схему H2 db для сеансов Spring Boot с использованием JDBC - PullRequest
0 голосов
/ 20 ноября 2018

Когда я запускаю приложение Spring Boot, оно не выполняет скрипт schema.sql.Здесь я что-то не так делаю?

Полный код здесь

application.properties:

spring.security.user.name=user
spring.security.user.password=asdf

spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

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

Я также пытался добавить этона мою application.properties

spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-h2.sql

build.gradle

dependencies {
  implementation('org.springframework.session:spring-session-jdbc')
  implementation('org.springframework.boot:spring-boot-starter-data-rest')
  implementation('org.springframework.boot:spring-boot-starter-jdbc')
  implementation('org.springframework.boot:spring-boot-starter-security')
  implementation('org.springframework.session:spring-session-jdbc')
  runtimeOnly('com.h2database:h2')
  testImplementation('org.springframework.boot:spring-boot-starter-test')
  testImplementation('org.springframework.security:spring-security-test')
}

schema.sql

  DROP TABLE IF EXISTS SPRING_SESSION_ATTRIBUTES;
  DROP TABLE IF EXISTS SPRING_SESSION;

  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
  );

Версия Spring: 2.1.0

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вы отключили опцию hibernate ddl-auto?Если не указать это в своем application.properties

spring.jpa.hibernate.ddl-auto=none

Раздел 85.3 в spring docs говорит:

В приложении на основе JPA вы можете выбратьчтобы позволить Hibernate создать схему или использовать schema.sql, но вы не можете сделать и то, и другое.Обязательно отключите spring.jpa.hibernate.ddl-auto, если вы используете schema.sql.

0 голосов
/ 20 ноября 2018

после отладки вашего приложения, оно, кажется, работает нормально, schema.sql также был выполнен, но вам необходимо иметь уровень DEBUG

add

logging.level.root = DEBUG

и проверьте журналы:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...