Я следую документации:
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html
... и пытаюсь создать несколько тривиальных интеграционных тестов.Я хотел бы заполнить БД при запуске с некоторыми общими данными.Но у меня есть «странное» поведение, которое я не понимаю с данными - файл $ {platform} .sql.
application.properties:
spring.jpa.database=H2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialize=true
spring.datasource.initialization-mode=always
spring.datasource.platform=h2
spring.datasource.url = jdbc:h2:mem:
spring.datasource.driver-class-name = org.h2.Driver
Итак, у меня schema-h2.sql
гдеЯ создаю свою схему;почему-то кажется, что hibernate не будет автоматически генерироваться.И у меня есть @RunWith(SpringRunner.class) @DataJpaTest @Transactional
тест, который будет утверждать количество записей в таблице.Если таблица пуста, тест не пройден.Теперь что за странная часть (для меня):
Файл data-h2.sql обнаружен и выполнен.Откуда я это знаю?Если я сделаю опечатку в своем выражении sql, будет исключение времени выполнения.Так что это обрабатывается.Однако даже если этот оператор выполняется, таблица будет пустой в тесте.Зачем?Это не совершено или что-то?Я пытался добавить коммит;в файл, но это не помогло.Там не определены предварительные откаты или что-то еще.
- Файл import.sql, с другой стороны, созданный путем переименования data-h2.sql, также выполняется, и данные доступны в таблице при выполнении теста.
Так в чем же разница в поведении при обработке этих двух файлов?Я хотел бы использовать функцию Springboot вместо Hibernate, но как правильно ее использовать?