我想部署一个Spring-mvc + Hibernate项目,我希望:
如果hibernate.hbm2ddl.auto
设置为"create"
,我每次重新启动项目时都会丢失以前的数据。
如果设置为"update"
,我的import.sql
我将sql用于创建示例记录,将不会被执行。
那么,“产品”环境中最好的协议是什么?
答案 0 :(得分:0)
使用insert into sql命令创建sample_data.sql文件。
insert into table(col1,col2) values (val1,val2);
insert into table(col1,col2) values (val1,val2);
然后将属性添加到您的database.properties文件中,如下所示(我假设您的sample_data.sql和database.properties文件位于同一目录中);
database.hbm2ddl.import_files = sample_data.sql
最后一步是;将以下属性添加到sessionFactory配置中;
<prop key="hibernate.hbm2ddl.import_files">${database.hbm2ddl.import_files}</prop>
答案 1 :(得分:0)
hibernate.hbm2ddl.auto
无法自动处理更复杂的数据库更新方案。
对于制作,我建议http://www.liquibase.org/或https://flywaydb.org/
我对Liquibase有很好的经验(在多个项目中使用它几年)。
有一些学习曲线和一些重复(您必须自己创建数据库结构,这些工具不会从实体创建数据库结构)。
有关如何使用其中一种工具的详细信息,请参阅http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-execute-liquibase-database-migrations-on-startup。
即使没有Spring Boot,也很简单(只需在类路径中添加新库,创建第一个脚本和一个Spring Bean)。
编辑:如果您对使用上述概念的示例项目感兴趣, 见https://spring.io/blog/2016/05/31/zero-downtime-deployment-with-a-database
IT描述了更复杂的方案 - 如何在没有应用程序停机的情况下更新数据库。