【问题标题】:How to use a different value for hibernate.hbm2ddl.auto in the production environment如何在生产环境中为 hibernate.hbm2ddl.auto 使用不同的值
【发布时间】:2017-05-11 08:05:17
【问题描述】:
在我的 Java EE 应用程序中,我总是使用此选项配置我的 persistence.xml 文件:
<property name="hibernate.hbm2ddl.auto" value="create-drop">
对于测试来说真的很方便。当我提交我的代码时,persistence.xml 使用此配置提交。但是,当我部署到生产环境时,我不想删除我的数据库。
如何解决这个问题?
【问题讨论】:
标签:
java
jpa
jakarta-ee
deployment
persistence
【解决方案1】:
您永远不应将hibernate.hbm2ddl.auto 用于企业应用程序。最好将Flyway 用于生产和集成测试。
话虽如此,即使使用像 H2 这样的内存数据库也是不可取的。如果您将数据文件夹映射到tmpfs,您可以在 MySQL 和 PostgreSQL 上运行几乎与 H2 一样快的集成测试。
那么,回到你的问题。如果您真的只需要在测试环境中而不是在生产环境中重新创建表,那么您需要为 hibernate.hbm2ddl.auto 属性使用 Maven 参数:
<property name="hibernate.hbm2ddl.auto" value="${hbm2ddl.value}">
对于生产配置文件,值为:
<hbm2ddl.value>none</hbm2ddl.value>
而对于开发配置文件(默认),该值为:
<hbm2ddl.value>create-drop</hbm2ddl.value>