實際上我正在開發我的Spring啓動應用程序項目,並且我注意到有時在另一臺服務器(SQL Server)上有時會連接到我的數據庫,特別是當我嘗試使用FlyWay執行一些腳本遷移時,經過幾次嘗試。然後我注意到,我沒有在我的屬性spring.jpa.hibernate.ddl-auto中指定。然後我做了一些研究,發現它建議在開發中添加 spring.jpa.hibernate.ddl-auto= create-drop
。 並將其更改爲:spring.jpa.hibernate.ddl-auto= none
正在生產中。但是我沒有真正理解它是如何工作的,以及hibernate如何使用create value或none來生成數據庫模式。您可以請技術上解釋它是如何工作的,以及在開發和生產服務器中使用此屬性的建議是什麼。 謝謝spring.jpa.hibernate.ddl-auto屬性在Spring中如何工作?
回答
有關記錄,spring.jpa.hibernate.ddl-auto
屬性是特定於Spring Data JPA,並且是它們指定最終將傳遞給Hibernate的值的方法,該值屬性爲hibernate.hbm2ddl.auto
。
值create
,create-drop
,validate
,並update
基本上影響架構管理工具將如何處理在啓動數據庫模式。
例如,update
操作將查詢JDBC驅動程序的API以獲取數據庫元數據,然後Hibernate根據讀取的註釋類或HBM XML映射比較其創建的對象模型,並嘗試調整模式-飛。
例如,update
操作將嘗試添加新列,約束等,但不會刪除以前可能存在但不再作爲先前運行的對象模型的一部分的列或約束。
通常在測試用例場景中,您可能會使用create-drop
,以便創建模式,測試用例添加一些模擬數據,運行測試,然後在測試用例清理期間刪除模式對象,留下一個空的數據庫。
在開發過程中,通常會看到開發人員使用update
自動修改架構以在重新啓動時添加新的添加項。但是再次明白,這不會刪除以前執行中不再需要的列或約束。
在生產中,通常強烈建議您使用none
或者根本不指定此屬性。這是因爲數據庫管理員通常會檢查數據庫更改的遷移腳本,特別是如果您的數據庫跨多個服務和應用程序共享。
是的,從來沒有在生產中使用ddl代。我們使用ddl爲表結構生成初始腳本,並在該過程中涉及DBA。然後,我們將db腳本作爲部署單元的一部分,並在部署應用程序時使用Flyway執行它們。當我們需要修改數據庫時,我們將新腳本添加到下一個版本的應用程序並部署到分段。 Flyway將自動檢測當前版本並運行將數據庫轉換爲最新版本所需的腳本。如果一切正常,我們將部署到生產環境 –
如果我們不指定此屬性,該怎麼辦?例如我有我自己的
我有H2和春季啓動決定它必須使用」創建 - 刪除「,我想這覆蓋了我設置的屬性 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html –
- 1. 屬性RegularExpression如何在QTP中工作?
- 2. ThreadStatic屬性如何工作?
- 3. 屬性類如何工作?
- 4. 如何在gradle.build中使用spring屬性?
- 5. 如何在spring中注入driverClassLoader屬性?
- 6. Spring屬性佔位符默認值如何工作?
- 7. Spring Batch的:作業屬性
- 8. @CreatedBy如何在Spring Data JPA中工作?
- 9. Spring屬性編輯器只能在表單上工作嗎?
- 10. Gradle導出的屬性不工作與Spring中的gradle bootRun
- 11. Spring 3.0 EL如何從屬性文件中獲取屬性?
- 12. 內容屬性如何工作
- 13. 屬性查詢方法如何工作?
- 14. WPF Button.IsCancel屬性如何工作?
- 15. jsp:useBean範圍屬性如何工作?
- 16. Struts標記屬性如何工作?
- 17. UML mustBeOwned屬性如何工作?
- 18. applicationName屬性如何實際工作?
- 19. JavaScript會員/屬性如何工作?
- 20. Perl方法屬性如何工作?
- 21. 繼承對屬性如何工作?
- 22. JavaScript Canvas globalAlpha屬性如何工作?
- 23. 「document.createElement」如何工作以「顯示」屬性
- 24. `page-break-before` CSS屬性如何工作?
- 25. 依賴屬性如何工作?
- 26. JDBC URL屬性如何工作
- 27. 屬性不工作
- 28. HTTPPOST屬性不能在MVC中工作
- 29. 「name」屬性無法在WordPress中工作
- 30. 標題屬性在IE11中不工作
FWIW JPA 2.1有一個_standard_屬性javax.persistence.schema-generation.database.action,因此實際上並不需要使用JPA供應商特定的屬性來生成模式。 –