Фактически я работал над моим проектом приложения загрузки Spring, и я заметил, что иногда есть время на подключение к моей базе данных на другом сервере (SQL Server), особенно когда я пытаюсь выполнить некоторую миграцию скрипта с помощью FlyWay, но он работает после нескольких попыток. Я заметил, что я не указал в своих свойствах spring.jpa.hibernate.ddl-auto. Затем я провел некоторое исследование и обнаружил, что рекомендуется добавить spring.jpa.hibernate.ddl-auto= create-drop
в разработку. И измените его на: spring.jpa.hibernate.ddl-auto= none
на производстве. Но я на самом деле не понял, как это работает, и как спящий режим создает схему базы данных, создавая значение или не используя ни одного. Можете ли вы объяснить технически, как это работает, и какие рекомендации используют это свойство на сервере разработки и производства. Спасибокак именно spring.jpa.hibernate.ddl-auto свойство работает весной?
ответ
Для записи, spring.jpa.hibernate.ddl-auto
свойства Spring Data JPA специфичны и их способ определить значение, которое в конечном итоге будет принято в спящем режим по собственности он знает, hibernate.hbm2ddl.auto
.
Значение create
, create-drop
, validate
и update
в основном влияют как инструмент управление схемой будет управлять схемой базы данных при запуске.
Например, операция update
будет запрашивать API-интерфейс JDBC для получения метаданных базы данных, а затем Hibernate сравнивает создаваемую им объектную модель на основе чтения ваших аннотированных классов или сопоставлений XML HBM и будет пытаться настроить схему на -fly.
Операция update
, например, попытается добавить новые столбцы, ограничения и т. Д., Но никогда не удалит столбец или ограничение, которое могло существовать ранее, но больше не работает как часть объектной модели из предыдущего запуска.
Как правило, в сценариях тестирования вы, вероятно, используете create-drop
, чтобы создать свою схему, ваш тестовый пример добавляет некоторые макеты данных, запускает ваши тесты, а затем во время очистки тестовых объектов объекты схемы удаляются, оставляя пустую базу данных.
В разработке часто бывает, что разработчики используют update
для автоматического изменения схемы для добавления новых дополнений при перезапуске. Но снова поймите, это не удаляет столбец или ограничение, которое может существовать в предыдущих исполнениях, которые больше не нужны.
В производстве часто рекомендуется использовать none
или просто не указывать эту собственность. Это связано с тем, что администраторы баз данных часто просматривают сценарии миграции для изменения базы данных, особенно если ваша база данных разделена между несколькими службами и приложениями.
Да, никогда не используйте генерацию ddl в производстве. Мы генерируем исходные скрипты для структуры таблицы, используя ddl, и включаем администратор базы данных в процесс. Затем мы включаем сценарии db как часть блока развертывания и выполняем их с помощью Flyway при развертывании приложения. Когда нам нужно изменить базу данных, мы добавляем новые сценарии в следующую версию приложения и развертываем их в стадии постановки. Flyway автоматически обнаружит текущую версию и запустит сценарии, необходимые для приведения базы данных в новейшую версию. Если все будет работать, мы начнем производство. –
Что делать, если мы не указали это свойство? например, у меня есть свой собственный
У меня был H2 и весенний ботинок решил, что он должен был использовать" create-drop ", и я предполагаю, что это переопределяет мое свойство, которое я установил https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html –
- 1. Как работает ApplicationContextAware весной?
- 2. Как ввести свойство driverClassLoader весной?
- 3. Почему именно весной влияет на загрузку класса весной
- 4. Что именно запускает работу кварца cron весной?
- 5. Свойство DataEditor весной 3
- 6. @ProxyCodeSplit, как именно он работает?
- 7. Как именно эта сумма работает()?
- 8. Как именно работает фрагментация websocket?
- 9. Как именно работает притяжательный квантификатор?
- 10. Как именно этот код работает?
- 11. Как именно из ... импорт ... работает?
- 12. Как работает автомастер весной?
- 13. Как RequestMapping работает весной
- 14. Как работает Singleton весной?
- 15. Свойство не оценивалось весной xml
- 16. Как удалить свойство «_embedded» весной HATEOAS
- 17. Как установить свойство аннотаций весной данные Elasticsearch
- 18. Как перезагрузить свойство @Value из application.properties весной?
- 19. Свойство ValidateExternalMetadata, что именно это делает?
- 20. Свойство «user.dir» Java - что именно это означает?
- 21. Как BeanPropertyRowMapper работает внутри весной?
- 22. Как внутренне работает packageToScan весной?
- 23. Как работает инъекция зависимостей весной?
- 24. Как работает свойство DefaultButton Panel?
- 25. свойство Override и системные свойства весной XML
- 26. Swift ExpressibleByIntegerLiteral - Как именно он работает?
- 27. String сходство: как именно работает Bitap?
- 28. Как это работает? Что именно происходит?
- 29. Метод jquery get(), как именно он работает?
- 30. как компиляция работает именно на os x
FWIW JPA 2.1 имеет свойство _standard_ javax.persistence.schema-generation.database.action, поэтому на самом деле не вижу необходимости использовать специфические свойства поставщика JPA для генерации схемы. –