如何找出 H2 DB 在内存中运行

Posted

技术标签:

【中文标题】如何找出 H2 DB 在内存中运行【英文标题】:How to find out H2 DB is running in memory 【发布时间】:2014-09-14 17:58:56 【问题描述】:

我知道这是非常基本的问题。但我了解到 H2 DB 可以像普通 DB(例如 mysql)一样在内存中运行。我怎样才能知道我的 H2 是在内存中运行的?

Multiple processes can access the same database without having to start the server manually.
To do that, append ;AUTO_SERVER=TRUE to the database URL. You can use the same database URL
independent of whether the database is already open or not. **This feature doesn't work with in-
`memory databases.`**

【问题讨论】:

【参考方案1】:

根据我的研究,我发现我们必须更改连接网址才能在内存数据库中使用。

在内存中使用 h2:

<property name="hibernate.connection.url"
 value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />

在 HDD 上使用 h2:

<property name="hibernate.connection.url"
 value="jdbc:h2:~/test;DB_CLOSE_DELAY=-1;AUTO_SERVER=TRUE"/>

连接 URL 说明:

根据:h2database.com

DB_CLOSE_DELAY=-1

默认情况下,关闭与数据库的最后一个连接会关闭数据库。对于内存数据库,这意味着内容丢失。要保持数据库打开,请将 ;DB_CLOSE_DELAY=-1 添加到数据库 URL。要在虚拟机处于活动状态时保留内存数据库的内容,请使用 jdbc:h2:mem:test;DB_CLOSE_DELAY=-1。

AUTO_SERVER=TRUE

多个进程可以访问同一个数据库,而无需手动启动服务器。为此,请将 ;AUTO_SERVER=TRUE 附加到数据库 URL。无论数据库是否已打开,您都可以使用相同的数据库 URL。此功能不适用于内存数据库。示例数据库 URL:

【讨论】:

以上是关于如何找出 H2 DB 在内存中运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在内存数据库中使用 H2 测试 EntityManager 查询

如果在内存 DB 中使用 H2,则 Flyway 从版本 1 开始

docker 容器中的 H2 DB

H2DB:使用 AND 条件导致本地内存出错

无法在 h2 内存数据库中插入数据

H2 在 MySQL 模式下,内存 DB 对 ORDER BY 的处理方式不同