模块化数据库初始化

时间:2013-08-08 19:21:54

标签: java database jpa liquibase

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

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

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

  1. 创建简单的sql脚本。缺点是它们必须独立于数据库,并且这可能不是开发人员最友好的。除非我们可以用一些DB diff工具生成它们吗?
  2. 使用Java类通过JPQL初始化?
  3. 将配置存储在文件中?这避免了很多(但不是全部)配置DML。
  4. 使用像liquibase这样的工具?
  5. 这个(或类似的)问题的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我目前所处的项目与为核心系统添加功能的模块具有相同的概念。

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

无论如何,对于DB我们使用liquibase。首先要管理数据库及其所做的更改。但是(也可能对你有帮助)包含/生成另一个为模块添加表的SQL脚本。

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

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