Я пытаюсь настроить таблицы 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, чем это уже есть в моей конфигурации?