【问题标题】:Add an embedded h2 database to an executable jar将嵌入式 h2 数据库添加到可执行 jar
【发布时间】:2021-06-25 14:58:34
【问题描述】:

我正在编写一个小型 Java 应用程序,它将数据读/写到嵌入式 h2 数据库。 出于开发目的,我想将数据库添加到从我的应用程序生成的 jar 文件中。

用例是:用户只获取交付的 jar 文件,并且能够读取和写入数据到其中嵌入的数据库。

有没有办法做到这一点?

注意:我正在 IntelliJ 中开发应用程序并使用 maven 构建项目

【问题讨论】:

  • 一般来说,没有办法更新运行应用程序的 jar 的内容,所以我看不到您可以在 jar 文件中嵌入(可写)数据库.
  • 我在类似情况下所做的是检查数据库是否存在并且与 Jar 或子文件夹位于同一文件夹中。如果数据库不存在。我将 jar 中的初始数据库复制到包含 jar 的文件夹或子文件夹中。或者,您可以在看到它不存在时使用 SQL 语句创建整个数据库。

标签: java database javafx h2


【解决方案1】:

您似乎在问两个不同的问题:

  • 如何在我的JAR 文件中捆绑H2 数据库引擎 产品?
  • 如何将数据库与我的 JAR 文件捆绑在一起?

绑定数据库引擎库

第一个很简单。告诉您的依赖管理和构建工具,例如 MavenGradle 以包含 H2。这就是此类工具的工作,下载并安装此类库的副本。

对于 Maven,请参阅 Cheat Sheet 页面以获取当前 Maven 依赖项 XML 片段以包含在您的 POM 中。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

绑定数据库

关于在您的 JAR 中捆绑数据库的问题,请研究对您的问题的评论。他们注意到您无法在部署运行时写入 JAR 文件。您的数据库必须位于您的 JAR 文件外部。各种OSes 在其文件系统中都有专门的位置供应用程序写入此类数据文件。

一条评论建议您的代码在 JAR 中查找数据库。如果找到,将该数据库复制到 JAR 之外的另一个文件夹中。然后继续使用该外部化副本。

这种方法可行。但我会选择架构迁移

架构迁移

使用schema migration,在部署运行时创建一个新数据库,然后运行一系列 SQL 脚本。这些脚本执行DDL 命令,例如创建表。这些脚本运行DML 命令来根据需要创建行。

您可以选择架构迁移工具来定位、管理和运行这些脚本。我更喜欢Flyway,虽然Liquibase 也很受欢迎。其他的也可能存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多