将嵌入式 h2 数据库添加到可执行 jar

问题描述 投票:0回答:1

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

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

有没有办法实现这个目标?

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

java database javafx h2
1个回答
2
投票

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

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

捆绑数据库引擎库

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

对于 Maven,请参阅 Cheat Sheet 页面,了解要包含在 POM 中的当前 Maven 依赖项 XML 片段。

<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.222</version>
    <scope>compile</scope>
</dependency>

粘贴指定依赖项的 XML 副本时,请验证

scope
元素。

捆绑数据库

关于在 JAR 中捆绑数据库的问题,请研究对您的问题的评论。他们注意到您无法在部署运行时写入 JAR 文件。您的数据库必须位于 JAR 文件的“外部”。各种OS在其文件系统中都有专门的位置供应用程序写入此类数据文件。 一条评论建议您的代码在 JAR 中查找数据库。如果找到,则将该数据库复制到 JAR 之外的另一个文件夹。然后继续使用该外部化副本。

这个方法可行。但我会选择

架构迁移

架构迁移

通过

架构迁移

,在部署运行时,您可以创建一个新数据库,然后运行一系列 SQL 脚本。这些脚本执行DDL命令,例如创建表。这些脚本运行 DML 命令来根据需要创建行。 您可以选择架构迁移工具来查找、管理和运行这些脚本。我更喜欢

Flyway,尽管 Liquibase 也很受欢迎。其他也可能存在。

© www.soinside.com 2019 - 2024. All rights reserved.