如何在生产环境中为hibernate.hbm2ddl.auto使用不同的值
How to use a different value for hibernate.hbm2ddl.auto in the production environment
在我的 Java EE 应用程序中,我总是使用此选项配置我的 persistence.xml
文件:
<property name="hibernate.hbm2ddl.auto" value="create-drop">
这对测试来说真的很方便。当我提交我的代码时,persistence.xml 使用此配置提交。但是,当我部署到生产环境时,我不想删除我的数据库。
如何克服这个问题?
您永远不应将 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>
在我的 Java EE 应用程序中,我总是使用此选项配置我的 persistence.xml
文件:
<property name="hibernate.hbm2ddl.auto" value="create-drop">
这对测试来说真的很方便。当我提交我的代码时,persistence.xml 使用此配置提交。但是,当我部署到生产环境时,我不想删除我的数据库。
如何克服这个问题?
您永远不应将 hibernate.hbm2ddl.auto
用于企业应用程序。最好使用 Flyway
进行生产和集成测试。
也就是说,即使使用像 H2 这样的内存数据库也是不可取的。如果将数据文件夹映射到 tmpfs
.
所以,回到你的问题。如果您真的只需要在测试环境中而不是在生产环境中重新创建表,那么您需要为 hibernate.hbm2ddl.auto
属性:
<property name="hibernate.hbm2ddl.auto" value="${hbm2ddl.value}">
对于生产配置文件,值为:
<hbm2ddl.value>none</hbm2ddl.value>
而对于开发配置文件(默认),值为:
<hbm2ddl.value>create-drop</hbm2ddl.value>