实际上我正在开发我的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供应商特定的属性来生成模式。 –