H2 自动混合模式(AUTO_SERVER)

在 H2 数据库中,自动混合模式(Auto Mixed Mode)是一种特殊的运行模式,它允许 H2 在不同的模式之间自动切换,以适应不同的使用场景。

自动混合模式允许多个进程访问同一个数据库,而无需手动启动服务器。为此,请在数据库 URL 中添加 ;AUTO_SERVER=TRUE。无论数据库是否已打开,都可以使用相同的数据库 URL。注意:此功能不适用于内存数据库。

数据库 URL 示例:

jdbc:h2:/data/test;AUTO_SERVER=TRUE

注意,如果要在多个进程或计算机中连接该数据库,可以使用相同的 URL。

自动混合模式原理

首次连接数据库在内部以嵌入式模式进行,同时会启动服务器(作为守护进程线程)。

若数据库已在其他进程中打开,自动转为服务器模式,服务器 IP 地址和端口存于.lock.db 文件,不支持内存数据库。

首个打开数据库连接的程序用嵌入式模式,速度比服务器模式快,主程序最好先打开数据库。

首次连接会在随机端口启动服务器,允许远程连接但仅针对该数据库,客户端通过读取.lock.db 文件中的随机密钥与服务器通信。

首个连接关闭时服务器停止,若有其他远程连接打开,其中一个会启动服务器(自动重连功能已启用)。

所有进程需访问数据库文件,关闭启动服务器的首个连接会导致其他连接未结事务回滚(不禁用自动提交可能无问题)。

注意:不支持显式客户端 / 服务器连接(如 jdbc:h2:tcp:// 或 ssl://),内存数据库也不支持该模式。

自动混合模式示例

下面是一个如何使用该模式的示例。“应用程序1”和“应用程序2”不一定在同一台计算机上运行,可能也不在同一进程运行(可以在同一进程中运行)。如果它们需要访问数据库文件,可以使用相同的 URL 地址:

// 应用程序 1:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");

// 应用程序 2:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");

注意:使用此功能时,服务器默认使用任何空闲的 TCP 端口。当然,也可以使用 AUTO_SERVER_PORT=9090 手动设置端口。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号