升级H2 2.0后无法生成原H2格式数据库,求解决方案
H2 2.0版本生成旧格式数据库文件的解决方法
问题背景
在H2 1.3版本中,调用dataSource.getConnection()并使用URL jdbc:h2:file:C\DEV\test,会生成C\DEV\test.h2.db格式的文件型数据库。升级到H2 2.0.202版本后,相同操作生成的是test.mv.db文件;尝试添加URL参数MV_STORE=FALSE后,没有任何文件生成。
相关Maven依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.0.202</version> <scope>test</scope> </dependency> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.28.0</version> </dependency>
解决方案
H2 2.0默认使用MVStore存储引擎(对应.mv.db后缀文件),旧版本的PageStore引擎(.h2.db格式)需要通过特定参数配合启用,同时要注意路径格式的正确性:
修正后的JDBC URL示例:
jdbc:h2:file:C:\\DEV\\test;MV_STORE=FALSE;MODE=LEGACY或使用正斜杠避免转义问题:
jdbc:h2:file:C:/DEV/test;MV_STORE=FALSE;MODE=LEGACY参数作用说明:
MV_STORE=FALSE:强制切换回旧的PageStore存储引擎MODE=LEGACY:开启旧版本兼容模式,消除H2 2.0与1.3版本的行为差异,避免因兼容性问题导致数据库文件无法生成- 路径必须使用双反斜杠
\\或正斜杠/,单斜杠\会被解析为转义字符,导致路径错误,无法正常生成文件
另外需要注意:H2官方对旧PageStore引擎的支持正在逐步缩减,长期来看建议迁移到MVStore引擎,以获得更好的性能和功能支持。
内容的提问来源于stack exchange,提问作者Stanja
相关产品推荐
相关产品推荐

