在 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 手动设置端口。