thực sự tôi đang làm việc trên dự án ứng dụng khởi động Spring và tôi nhận thấy đôi khi có thời gian kết nối với Cơ sở dữ liệu của tôi trên máy chủ khác (SQL Server), đặc biệt là khi tôi cố gắng di chuyển một số tập lệnh bằng FlyWay, nhưng nó hoạt động sau nhiều lần thử. Tôi nhận thấy sau đó rằng tôi đã không chỉ định trong thuộc tính của tôi spring.jpa.hibernate.ddl-auto. Sau đó tôi đã làm một số nghiên cứu và thấy rằng nó được recommanded để thêm spring.jpa.hibernate.ddl-auto= create-drop
trong phát triển. Và thay đổi nó thành: spring.jpa.hibernate.ddl-auto= none
trong sản xuất. Nhưng tôi đã không thực sự hiểu làm thế nào nó thực sự làm việc, và làm thế nào hibernate tạo lược đồ cơ sở dữ liệu, với giá trị tạo ra hoặc sử dụng không có. Bạn có thể giải thích về mặt kỹ thuật nó thực sự hoạt động như thế nào, và các recommandations sử dụng tài sản này trong developpment và production server. Cảm ơn bạnchính xác thuộc tính spring.jpa.hibernate.ddl-auto hoạt động như thế nào trong Spring?
Trả lời
Để lưu nội dung, thuộc tính spring.jpa.hibernate.ddl-auto
là Dữ liệu mùa xuân JPA cụ thể và là cách để chỉ định giá trị cuối cùng sẽ được chuyển đến Hibernate theo thuộc tính nó biết, hibernate.hbm2ddl.auto
.
Các giá trị create
, create-drop
, validate
và update
về cơ bản ảnh hưởng đến cách quản lý công cụ lược đồ sẽ thao tác lược đồ cơ sở dữ liệu khi khởi động. Ví dụ, hoạt động update
sẽ truy vấn API của trình điều khiển JDBC để nhận siêu dữ liệu của cơ sở dữ liệu và sau đó Hibernate so sánh mô hình đối tượng nó tạo dựa trên việc đọc các lớp chú thích của bạn hoặc ánh xạ XML HBM và sẽ cố gắng điều chỉnh lược đồ trên-the -bay.
Ví dụ: hoạt động update
sẽ cố gắng thêm cột, ràng buộc mới, v.v. nhưng sẽ không bao giờ xóa cột hoặc ràng buộc có thể tồn tại trước đó mà không còn là một phần của mô hình đối tượng từ lần chạy trước. Thông thường trong trường hợp thử nghiệm, bạn có thể sử dụng create-drop
để tạo lược đồ, trường hợp thử nghiệm của bạn bổ sung một số dữ liệu giả, bạn chạy thử nghiệm và sau đó trong quá trình dọn dẹp, các đối tượng lược đồ sẽ bị loại bỏ, để lại một cơ sở dữ liệu trống.
Khi phát triển, thường thấy các nhà phát triển sử dụng update
để tự động sửa đổi lược đồ để thêm các bổ sung mới khi khởi động lại. Nhưng một lần nữa hiểu, điều này không loại bỏ một cột hoặc ràng buộc có thể tồn tại từ các lần thực hiện trước đó không còn cần thiết nữa.
Trong quá trình sản xuất, bạn nên sử dụng none
hoặc đơn giản là không chỉ định thuộc tính này. Đó là bởi vì thực tế phổ biến cho các DBA để xem xét các kịch bản di chuyển cho các thay đổi cơ sở dữ liệu, đặc biệt nếu cơ sở dữ liệu của bạn được chia sẻ trên nhiều dịch vụ và ứng dụng.
Vâng, không bao giờ sử dụng thế hệ ddl trong sản xuất. Chúng tôi tạo ra các tập lệnh ban đầu cho cấu trúc bảng bằng ddl và liên quan đến DBA trong quá trình này. Sau đó, chúng tôi bao gồm các kịch bản lệnh db như một phần của đơn vị triển khai và thực thi chúng bằng Flyway khi ứng dụng được triển khai. Khi chúng ta cần sửa đổi cơ sở dữ liệu, chúng ta thêm các kịch bản lệnh mới vào phiên bản tiếp theo của ứng dụng và triển khai để dàn dựng. Đường bay sẽ tự động phát hiện phiên bản hiện tại và chạy tập lệnh cần thiết để đưa cơ sở dữ liệu lên phiên bản mới nhất. Nếu mọi thứ hoạt động, chúng tôi triển khai để sản xuất. –
nếu chúng tôi không chỉ định tài sản này thì sao? ví dụ tôi có của riêng tôi
Tôi đã khởi động H2 và spring đã quyết định sử dụng" tạo và thả ", và tôi đoán điều này sẽ ghi đè thuộc tính của tôi rằng tôi đã đặt https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html –
- 1. Chính xác các thuộc tính đính kèm hoạt động như thế nào trong WPF?
- 2. Thuộc tính Count hoạt động như thế nào trong Powershell?
- 3. Spring ClassPathResource hoạt động như thế nào?
- 4. Qt hoạt động như thế nào (chính xác)?
- 5. Chính xác từ khóa 'params' hoạt động như thế nào?
- 6. DateTime.Now.Ticks hoạt động chính xác như thế nào?
- 7. Liên kết hoạt động chính xác như thế nào?
- 8. MaxTenuringThreshold - chính xác nó hoạt động như thế nào?
- 9. AsParallel hoạt động chính xác như thế nào?
- 10. Input.nextInt() hoạt động chính xác như thế nào?
- 11. Spring-boot @ConditionalOnClass hoạt động như thế nào?
- 12. Thuộc tính '.class' hoạt động như thế nào?
- 13. Các lớp thuộc tính hoạt động như thế nào?
- 14. Ứng dụng khởi động Spring hoạt động như thế nào?
- 15. Thuộc tính tự động tổng hợp trong xcode 4.4 hoạt động như thế nào?
- 16. Chính sách $ .mobile.activePage hoạt động như thế nào?
- 17. Tính năng liên kết dữ liệu của Spring hoạt động như thế nào?
- 18. Tính kế thừa hoạt động như thế nào đối với Thuộc tính?
- 19. Ninject OnePerRequestBehaviour dường như không hoạt động chính xác?
- 20. Thuộc tính `complete` của phần tử hình ảnh hoạt động như thế nào?
- 21. Thuộc tính CSS `content` hoạt động như thế nào cho phần tử` img` trong WebKit?
- 22. StringFormat Binding dường như không hoạt động chính xác
- 23. Bản ghi Google App Engine hoạt động chính xác như thế nào?
- 24. Tính đúng/sai hoạt động trong PHP như thế nào?
- 25. Tính đa hình hoạt động như thế nào trong Python?
- 26. Bảo mật dựa trên mảng băm chính xác hoạt động như thế nào?
- 27. MVC SessionStateAttribute không hoạt động như Thuộc tính toàn cầu
- 28. Thuộc tính CustomValidation dường như không hoạt động
- 29. Lời khuyên @Around hoạt động như thế nào trong Spring AOP?
- 30. iframe hoạt động như thế nào trong HTML5 mà không có thuộc tính hộp cát?
FWIW JPA 2.1 có thuộc tính _standard_ javax.persistence.schema-generation.database.action nên không thực sự thấy cần phải sử dụng các thuộc tính cụ thể của nhà cung cấp JPA để tạo lược đồ. –