【问题标题】:Modular Database Initialization模块化数据库初始化
【发布时间】:2013-08-08 19:21:53
【问题描述】:

在为企业应用程序开发模块化系统架构时,我遇到了一些数据库初始化问题。我们有一个提供基本实体和基本配置的核心库。在这个核心之上构建了几个模块。它们是可插拔的,可以有自己的实体和配置。一些特点:

  • 配置,如系统属性、资源包等,都存储在数据库中。
  • JPA 用于使系统数据库独立。
  • 系统在 Java SE 上运行

每个模块都可以自带表,但它们也可以要求填充核心属性表或核心资源包表。所以不知何故,我们需要一些机制来为数据库运行 DDL 和 DML 初始化。一些选项:

  1. 创建简单的 sql 脚本。缺点是它们必须独立于数据库,也许这对开发人员来说不是最友好的。除非我们可以使用一些 DB diff 工具生成它们?
  2. 使用 Java 类通过 JPQL 进行初始化?
  3. 将配置存储在文件中?这避免了很多(但不是全部)配置 DML。
  4. 使用像 liquibase 这样的工具?

解决这个(或类似的)问题的最佳做法是什么?

【问题讨论】:

  • 你已经用 liquibase 标记了这篇文章...这个工具对你没有帮助吗?
  • @MarkO'Connor 这可能是一个选择。但我正在研究一种最佳实践方法。因此,如果还有其他/更好的方法,那么我很乐意了解它们。

标签: java database jpa liquibase


【解决方案1】:

使用数据库存储所有配置数据是最好的选择。许多产品,例如 WebSphere Portal 或 Liferay 使用数据库来存储每个 portlet 甚至主题的配置数据。不要忘记包括那些用作 SOA 和业务规则的一部分。

因此,使用 SQL 脚本也是最好的选择。但是,如果您需要非常特定的 SQL 功能,您可能需要为每个数据库管理系统创建多个版本的相同脚本。

【讨论】:

    【解决方案2】:

    我目前在一个项目中,该项目对向核心系统添加功能的模块具有相同的想法。

    通常我们使用 maven 和多个 src 文件夹以及 maven 配置文件和不同的构建,以便能够生成具有不同模块的可部署。 (我们没有必要推出单个模块并在以后安装它们 - 这在您的项目中可能会有所不同。我们只是使用不同的模块构建不同的版本。)

    无论如何,对于我们使用 liquibase 的数据库。首先管理数据库和对其所做的更改。而且(这可能对您有帮助)包括/生成另一个为模块添加表的 SQL 脚本。

    每个模块都有自己的变更集文件,其中包含该模块所需的所有内容(随着模块随着时间的推移也有不同的版本)。然后可以应用或不应用这些。

    所以,我认为 liquibase 在您的情况下也很有用(尽管它的主要目的是管理数据库更改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2021-11-10
      • 2021-06-15
      相关资源
      最近更新 更多