在同一应用程序中使用内存中的 H2 和 H2 文件

Posted

技术标签:

【中文标题】在同一应用程序中使用内存中的 H2 和 H2 文件【英文标题】:Using H2 in memory AND H2 file within same application 【发布时间】:2020-10-25 08:15:09 【问题描述】:

是否可以在同一个应用程序中使用两个 H2 数据库:内存中用于某些类型的数据文件存储用于其他数据?

我的应用程序使用 spring boot/batch。 Spring 自动将一些元数据存储在 H2 中。我无法控制它,通常也不关心持久化它 - 这就是我希望它存储在内存中的原因。

但是,我也有我希望保留的应用程序特定数据 - 我希望将其存储在一个文件中。

这可能吗?

【问题讨论】:

定义两个数据源:一个在内存中,一个由文件支持,然后配置Spring Batch使用内存中的一个:***.com/questions/25540502/… 【参考方案1】:

您想要定义多个数据源并将其中一个分配为 主要的。

将 Spring Boot 应用程序与 H2 连接:在大多数情况下,只需将 H2 运行时 jar 添加到依赖项中就足够了。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

一种简化配置的建议方法是创建单独的配置类,从而分离存储库包等。

使用 Spring Boot 将 H2 作为持久数据库运行所需的最低配置:

application.properties 更新为:

# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2

# Datasource
spring.datasource.url=jdbc:h2:file:~/spring-boot-h2-db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.hibernate.ddl-auto=update

请阅读文档以便更好地理解: Configure Two Data Sources

【讨论】:

这是有道理的。但是,我希望将 Spring 批处理元数据存储在内存中。我不控制那些事务,这使得这两个数据源的方法变得困难。在将应用程序数据存储在文件中的同时,我如何才能让 Spring 将所有内容批量存储在内存中?

以上是关于在同一应用程序中使用内存中的 H2 和 H2 文件的主要内容,如果未能解决你的问题,请参考以下文章

内存数据库H2中的Spring Boot在初始化时不会从文件中加载数据

在测试我的 Quarkus 应用程序时如何使用内存中的 H2 数据库?

内存数据库中的 H2:使用 JDBC 设置时区? Java 单元测试

在 H2 中切换同一事务中的两个唯一字段时违反唯一约束

Mysql兼容的内存数据库中的查询错误(h2)

从 jar 中包含的文件初始化内存中的 H2?