spring.datasource.data обнаружен, но скрипт так и не выполнен - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь настроить таблицы H2 в памяти для тестового класса в моем загрузочном приложении Spring.

Мой конфиг выглядит примерно так:

spring:
  jpa:
    show-sql: true
    generate-ddl: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
  hibernate:
    ddl-auto: create-drop
  datasource:

    # not sure which one to use so added both just in case
    initialization-mode: always
    initialize: true

    platform: h2

    # casting a wide net here, but no cookie - completely ignored
    data: data-h2.sql,classpath*:data-h2.sql, classpath:data-h2.sql

    url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    driver-class-name: org.h2.Driver
    username: sa
    password:

Как видите, я пытаюсь загрузить data-h2.sql скрипт при инициализации БД.

К сожалению, свойство игнорируется независимо от значения.

Я уверен, что файл конфигурации выбирается правильно (например, я отчаянно добавил аннотированное @Value("${spring.datasource.data}" свойство в свой тестовый класс, и значение действительно было заполнено правильно).

В качестве альтернативы, я мог бы аннотировать класс теста с помощью @Sql("classpath:data-h2.sql"), который запускал скрипт - однако он делал это для каждого теста, хотя я хотел, чтобы скрипт запускался один раз перед выполнением любого теста.

Я также попытался удалить это и использовать пустое значение schema.sql и переместить население в data.sql (как предложено здесь ), но Spring пожаловался бы на пустой файл схемы - который бесполезно для меня, потому что моя схема генерируется автоматически, и я, конечно, не хочу ее заново создавать (примечание: возможно, конфликт со свойством гибернации, если память служит).

Я просмотрел некоторые ответы здесь , но единственный один , который я мог использовать, не работает.

Единственное решение, которое я вижу, это сохранить аннотацию @Sql, но пытаться очищать таблицы после каждого теста с другой аннотацией @Sql, запускающей другой скрипт на @After.

Это кажется мне безумным - 1034 * должно быть лучшим решением.

Мне не хватает чего-то более эзотерического c, чем это уже есть в моей конфигурации?

1 Ответ

0 голосов
/ 22 апреля 2020

Просто поместите ваш файл в каталог / main / resources (что вы уже сделали)

Spring Boot 2:

Правильное свойство:

spring.datasource.initialization-mode=always

Подробнее об этом topi c см. В документации по загрузке Spring: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto -initialize-a-database-using-spring-jdb c

Spring Boot 1

Вам нужно только поместить data-h2. sql в путь к классам

Подробнее об этой топике c см. В документации по Spring Boot: https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/htmlsingle/#howto -initialize-а-базы данных с использованием пружинным-JDB c

...