当前位置: 首页 > 知识库问答 >
问题:

H2数据库-为多个Spring Boot应用程序使用持久存储

艾善
2023-03-14

我想将h2数据库用于多个Spring启动应用程序。我已经阅读了几篇文章,他们告诉你如何配置h2数据库,但是内存数据库的数据存储是临时的。我只想知道是否有可能拥有持久存储,用于h2数据库的多个Spring启动应用程序。任何帮助或链接都将不胜感激。谢谢。

共有2个答案

宰父志新
2023-03-14

似乎有一种方法可以让多个应用程序使用数据源末尾的属性AUTO_SERVER=TRUE来访问H2数据库(非内存数据库)的同一个文件。url。这称为H2数据库的自动混合模式

自动混合模式

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

jdbc: h2:/data/test;AUTO_SERVER=TRUE对与此数据库的所有连接使用相同的URL。在内部,当使用这种模式时,与数据库的第一次连接是在嵌入式模式下进行的,另外在内部启动服务器(作为守护线程)。如果数据库已经在另一个进程中打开,则自动使用服务器模式。服务器的IP地址和端口存储在文件中。lock.db,这就是为什么不能支持内存数据库。

打开与数据库的第一个连接的应用程序使用嵌入式模式,该模式比服务器模式快。因此,如果可能的话,主应用程序应该首先打开数据库。第一个连接自动启动随机端口上的服务器。但是,此服务器只允许远程连接到此数据库(为了确保这一点,客户端读取.lock.db文件并将存储在那里的随机密钥发送到服务器)。当第一个连接关闭时,服务器停止。如果其他(远程)连接仍然打开,其中一个将启动服务器(自动重新连接将自动启用)。

所有进程都需要访问数据库文件。如果第一个连接关闭(启动服务器的连接),其他连接的打开事务将回滚(如果不禁用自动提交,这可能不是问题)。不支持显式客户端/服务器连接(使用jdbc: h2: tcp://或ssl://)。内存数据库不支持此模式。

下面是一个如何使用此模式的示例。应用程序1和2不一定在同一台计算机上启动,但它们需要访问数据库文件。应用程序1和2通常是两个不同的进程(但它们可以在同一进程中运行)。

正如他评论的那样,OP面临的问题是:

我能够使用文件存储连接到主应用程序中的h2数据库。然而,当我尝试从第二个应用程序连接到同一个数据库时,就会出现文件锁定错误

原因是只有在OP未启用的自动混合模式下才允许这样做。

班承恩
2023-03-14

h2可以将数据存储在文件或内存中。对于基于文件的存储,jdbc url的格式应为jdbc:h2:[file:]]。对于内存,jdbc url看起来像jdbc:h2:mem:。看见http://www.h2database.com/html/features.html#database_url有关数据库url格式的详细信息。

 类似资料:
  • 问题内容: 我遇到以下问题:当我尝试使用外部IP地址(PC的IP而不是本地IP的createTcpServer =在cmd.exe中运行ipconfig后我们看到的输出)时,发生以下错误: 服务器错误:异常打开端口“ 9092”(端口可能正在使用),原因:“ java.net.BindException:无法分配请求的地址:JVM_Bind” [90061-169] 但是,该端口未使用。我已经使用

  • 我的应用程序有3个组件, 1) 一种面向用户的组件,接收请求并将其存储到数据库中。2)一个后端组件,从数据库中读取数据,进行处理并将其发送到外部系统。3) 存储用户输入的数据库 我如何测试流程是这样的:用户输入数据- 注意:我尝试使用ddl auto:update,但它不起作用。

  • 目的 配置 NFS 共享为 OpenShift 节点提供存储,并且配置 OpenShift 持久卷以绑定至数据库 Pod。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 配置 NFS 共享持久卷1. 登录到 NFS 服务器 # ssh nfs.example.com2. 创建 config-nfs.sh 脚本,内容如下 #!/usr/bin/sh exp

  • 我的环境:OS:CentOS 7,Java:1.8.0_181,Maven:3.5.4,Quarkus:0.11.0 问候。

  • 我刚刚用Java8创建了springboot批处理应用程序,我想用Anotation为springbatch表创建一个数据库。 我想我必须创建配置文件,但我不知道怎么做。 @Configuration公共类ConfigBatch{ } 我导入“@ImportResource”生成一个错误,因为在我的java代码中有一个数据源,在我的xml文件中有一个数据源: 我只想在H2数据源中生成spring批

  • 正在为%1请求的包运行增量备份。Package@pm@with result:Success Package com.example.myapplication3 with result:Success备份已完成with 当我重新安装应用程序时,它不还原,当我使用令牌和包名并强制在adb中还原时,它也不还原,而是给我: 我觉得RestoreStarting:0包中的错误一定很明显,但我在网上找不到