База данных Spring Boot H2 не выполняется самоустанавливающийся сброс. Не удается найти существующие данные. Проблемы с liquibase

#spring-boot #h2 #liquibase #jdbctemplate

#spring-boot #h2 #liquibase #jdbctemplate

Вопрос:

У меня есть следующая настройка:

  1. Пружинный Ботинок
  2. Встроенная база данных H2
  3. Скрипты Liquibase для создания данных

Прежде всего, я хочу начинать с чистого листа каждый раз, когда перезапускаю свое приложение. Я хочу, чтобы liquibase каждый раз заново создавала таблицы H2 из сценариев. Прямо сейчас этого не происходит, и она просто сохраняет существующие данные. Если я удалю данные вручную из консоли h2, они не будут созданы заново, если я не обновлю идентификаторы наборов изменений.

Даже тогда, прямо сейчас, у меня есть существующая таблица под названием User, которая содержит данные. Я вижу это из своей консоли h2. Но внезапно, когда я использую свой запрос JdbcTemplate, он не находит никаких результатов, и я больше не могу войти в систему (он получает нулевой результат).

Редактировать:

Я исправил запрос данных, добавив установщики в мой User.java объект. Это исправило ситуацию (я надеялся, что смогу обойтись без них, но, похоже, нет).

Но я все еще хочу, чтобы таблицы, созданные моей ликвидной базой, сбрасывались каждый раз, чтобы я мог изменять запросы без ошибок.

Ответ №1:

Очень простой способ получить свежую базу данных при каждом запуске — использовать базу данных в памяти вместо файла.

Просто замените spring.datasource.url=jdbc:h2:~/company;MV_STORE=false на spring.datasource.url=jdbc:h2:mem:company;MV_STORE=false в вашем приложении.свойства

Комментарии:

1. Спасибо! Я знал, что мне чего-то не хватает, потому что я думал, что это должно было быть несуществующим по умолчанию. Следующее на самом деле больше не имеет никакого отношения к вопросу, но мне было интересно — подходит ли такая базовая настройка? Часть входа и аутентификации? Я действительно не делал этого таким образом раньше.