【问题标题】:Play! Framework JBoss AS 7 deployment, how to initialize the database?玩!框架 JBoss AS 7 部署,如何初始化数据库?
【发布时间】:2023-03-30 16:54:01
【问题描述】:

我正在尝试将 Play 1.2.4 应用程序部署到 JBoss 7.0.2 服务器(我不允许使用 Play 嵌入式服务器)。

我已经遇到了以下问题:

现在我正在尝试了解初始化数据库的模式。

最好的方法是什么?我应该设置jpa.ddl=update 然后重新评论它,还是有更好的方法?

【问题讨论】:

    标签: playframework jboss7.x


    【解决方案1】:

    您可以使用evolutions 来更新或管理您的数据库更改。

    Evolutions 倾向于让您更好地控制架构更改,并且许多人更喜欢将它用于生产环境。

    【讨论】:

    • 就我个人而言,我不是自动 ORM DDL 生成的忠实拥护者,所以我也更喜欢进化。特别是在生产环境中,我更喜欢分两个不同的步骤进行部署:(1) 更新数据库,然后 (2) 部署新版本。
    • 我也更喜欢生产中的演变,并且在任何情况下都是显式而不是透明的数据库修改。我有点困惑的是如何引导数据库。听起来很奇怪,我必须为此编辑 application.conf 两次...
    【解决方案2】:

    同时我在 lighthouse play bugtracking 系统上发现了一个undocument jpa.ddl option

    jpa.ddl = create
    

    存在。 只有在数据库不存在时才会修改它。敏感。

    这听起来像是一个很好的默认设置,因为通常在部署数据库时还没有。

    这回答了我一半的问题。

    现在我想知道是否有办法在创建数据库之前 开始迁移 - 或者 jpa.ddl=create 是否与它一样好。

    编辑

    我必须说我还远远没有找到令人满意的解决方案;

    我什至没有完全理解 ddl=create 应该如何工作,而且缺乏精确的文档不太可能改变。

    这就是我现在要做的:

    在最初开发的大部分时间里,我都将数据库保存在内存中,ddl=update。 当我感觉自己相对稳定时,我会转移到 mysql 数据库并按照@emt14 的建议开始编写进化。

    我个人一直使用 mem db 快速获取正确的 sql 来编写我自己的演进,并且我有一些具有不同播放 ID 的从 ​​mem 切换到文件到真实数据库,以便我可以保持我的数据持久化同时快速测试新代码。

    我曾经写过很多夹具,但我不知道有什么方法可以轻松地将它们变成进化(除了复制生成的 sql!)所以我可能会停止这样做。

    我可能有一天会尝试migrate module...但实际上我更有可能在此之前迁移到 Play 2.x。除了维护现有项目之外,1.2.x 系列的吸引力太大了。

    总而言之,我最终主要使用两个极端(ddl=updatemem dbddl=nonemysql/pgsql 真实数据库)并从 mem:db 手动转储数据来编写我自己的演变,包括所需的初始固定装置(不同于测试数据固定装置)。

    【讨论】:

      【解决方案3】:

      对于数据库更改,我见过的大多数项目都有专有解决方案 - 只需检查架构并添加缺少的列和表。通常不考虑降级:)

      无论如何 - 如果发生结构变化,我可能不会让某些工具摆弄数据,而宁愿依靠 DBA 和测试人员来开发和测试防弹迁移脚本。

      【讨论】:

      • “只是他们检查架构并添加缺少的列和表”...您通常如何继续生成包含表和初始数据(夹具)的第一个 SQL 文件?我喜欢 Play 可以自己做……但我怎么能告诉他/何时/做呢?我在回答中提到的“创建”选项是向前迈出的一大步,但我仍然缺少一些东西......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2011-10-20
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多