【问题标题】:Spring+Hibernate mysql dataBase initialized with sample dataSpring+Hibernate mysql数据库用示例数据初始化
【发布时间】:2016-05-30 11:20:05
【问题描述】:

我想部署一个 Spring-mvc + Hibernate 项目,我想要:

  1. 第一次启动时自动创建所有数据库模式
  2. 如果添加了属性,请更新架构。
  3. 在一些表中添加一些记录,USER的root用户等。

如果hibernate.hbm2ddl.auto设置为"create",每次重启项目都会丢失之前的数据。 如果设置为"update",我的import.sql我放sql创建示例记录的地方,将不会被执行。

那么,在“产品”环境中最好的做法是什么?

【问题讨论】:

    标签: hibernate spring-mvc


    【解决方案1】:

    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 描述了更复杂的场景 - 如何在不停机的情况下更新数据库。

    【讨论】:

      【解决方案2】:

      使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-26
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        • 2018-02-14
        • 2010-12-29
        • 2012-06-10
        相关资源
        最近更新 更多